diff options
| author | 2017-10-09 23:56:20 -0400 | |
|---|---|---|
| committer | 2017-10-09 23:56:20 -0400 | |
| commit | b1d5db1cf60344b6b081c9d03cb6ccc3264326cd (patch) | |
| tree | fde377c4ba3c0f92c032e6f5ec8627aae37270ef /src | |
| parent | loader: Various improvements for NSO/NRO loaders. (diff) | |
| parent | Merge pull request #2996 from MerryMage/split-travis (diff) | |
| download | yuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.tar.gz yuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.tar.xz yuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.zip | |
Merge remote-tracking branch 'upstream/master' into nx
# Conflicts:
# src/core/CMakeLists.txt
# src/core/arm/dynarmic/arm_dynarmic.cpp
# src/core/arm/dyncom/arm_dyncom.cpp
# src/core/hle/kernel/process.cpp
# src/core/hle/kernel/thread.cpp
# src/core/hle/kernel/thread.h
# src/core/hle/kernel/vm_manager.cpp
# src/core/loader/3dsx.cpp
# src/core/loader/elf.cpp
# src/core/loader/ncch.cpp
# src/core/memory.cpp
# src/core/memory.h
# src/core/memory_setup.h
Diffstat (limited to 'src')
209 files changed, 20476 insertions, 2333 deletions
diff --git a/src/audio_core/codec.cpp b/src/audio_core/codec.cpp index 7a3bd7eb3..6fba9fdae 100644 --- a/src/audio_core/codec.cpp +++ b/src/audio_core/codec.cpp | |||
| @@ -117,7 +117,9 @@ StereoBuffer16 DecodePCM16(const unsigned num_channels, const u8* const data, | |||
| 117 | ret[i].fill(sample); | 117 | ret[i].fill(sample); |
| 118 | } | 118 | } |
| 119 | } else { | 119 | } else { |
| 120 | std::memcpy(ret.data(), data, sample_count * 2 * sizeof(u16)); | 120 | for (size_t i = 0; i < sample_count; ++i) { |
| 121 | std::memcpy(&ret[i], data + i * sizeof(s16) * 2, 2 * sizeof(s16)); | ||
| 122 | } | ||
| 121 | } | 123 | } |
| 122 | 124 | ||
| 123 | return ret; | 125 | return ret; |
diff --git a/src/audio_core/codec.h b/src/audio_core/codec.h index 2b0c395e6..877b2202d 100644 --- a/src/audio_core/codec.h +++ b/src/audio_core/codec.h | |||
| @@ -5,13 +5,13 @@ | |||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <array> | 7 | #include <array> |
| 8 | #include <vector> | 8 | #include <deque> |
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | 10 | ||
| 11 | namespace Codec { | 11 | namespace Codec { |
| 12 | 12 | ||
| 13 | /// A variable length buffer of signed PCM16 stereo samples. | 13 | /// A variable length buffer of signed PCM16 stereo samples. |
| 14 | using StereoBuffer16 = std::vector<std::array<s16, 2>>; | 14 | using StereoBuffer16 = std::deque<std::array<s16, 2>>; |
| 15 | 15 | ||
| 16 | /// See: Codec::DecodeADPCM | 16 | /// See: Codec::DecodeADPCM |
| 17 | struct ADPCMState { | 17 | struct ADPCMState { |
diff --git a/src/audio_core/hle/source.cpp b/src/audio_core/hle/source.cpp index 92484c526..c12287700 100644 --- a/src/audio_core/hle/source.cpp +++ b/src/audio_core/hle/source.cpp | |||
| @@ -244,17 +244,27 @@ void Source::GenerateFrame() { | |||
| 244 | break; | 244 | break; |
| 245 | } | 245 | } |
| 246 | 246 | ||
| 247 | const size_t size_to_copy = | 247 | switch (state.interpolation_mode) { |
| 248 | std::min(state.current_buffer.size(), current_frame.size() - frame_position); | 248 | case InterpolationMode::None: |
| 249 | 249 | AudioInterp::None(state.interp_state, state.current_buffer, state.rate_multiplier, | |
| 250 | std::copy(state.current_buffer.begin(), state.current_buffer.begin() + size_to_copy, | 250 | current_frame, frame_position); |
| 251 | current_frame.begin() + frame_position); | 251 | break; |
| 252 | state.current_buffer.erase(state.current_buffer.begin(), | 252 | case InterpolationMode::Linear: |
| 253 | state.current_buffer.begin() + size_to_copy); | 253 | AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier, |
| 254 | 254 | current_frame, frame_position); | |
| 255 | frame_position += size_to_copy; | 255 | break; |
| 256 | state.next_sample_number += static_cast<u32>(size_to_copy); | 256 | case InterpolationMode::Polyphase: |
| 257 | // TODO(merry): Implement polyphase interpolation | ||
| 258 | LOG_DEBUG(Audio_DSP, "Polyphase interpolation unimplemented; falling back to linear"); | ||
| 259 | AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier, | ||
| 260 | current_frame, frame_position); | ||
| 261 | break; | ||
| 262 | default: | ||
| 263 | UNIMPLEMENTED(); | ||
| 264 | break; | ||
| 265 | } | ||
| 257 | } | 266 | } |
| 267 | state.next_sample_number += static_cast<u32>(frame_position); | ||
| 258 | 268 | ||
| 259 | state.filters.ProcessFrame(current_frame); | 269 | state.filters.ProcessFrame(current_frame); |
| 260 | } | 270 | } |
| @@ -305,25 +315,6 @@ bool Source::DequeueBuffer() { | |||
| 305 | return true; | 315 | return true; |
| 306 | } | 316 | } |
| 307 | 317 | ||
| 308 | switch (state.interpolation_mode) { | ||
| 309 | case InterpolationMode::None: | ||
| 310 | state.current_buffer = | ||
| 311 | AudioInterp::None(state.interp_state, state.current_buffer, state.rate_multiplier); | ||
| 312 | break; | ||
| 313 | case InterpolationMode::Linear: | ||
| 314 | state.current_buffer = | ||
| 315 | AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier); | ||
| 316 | break; | ||
| 317 | case InterpolationMode::Polyphase: | ||
| 318 | // TODO(merry): Implement polyphase interpolation | ||
| 319 | state.current_buffer = | ||
| 320 | AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier); | ||
| 321 | break; | ||
| 322 | default: | ||
| 323 | UNIMPLEMENTED(); | ||
| 324 | break; | ||
| 325 | } | ||
| 326 | |||
| 327 | // the first playthrough starts at play_position, loops start at the beginning of the buffer | 318 | // the first playthrough starts at play_position, loops start at the beginning of the buffer |
| 328 | state.current_sample_number = (!buf.has_played) ? buf.play_position : 0; | 319 | state.current_sample_number = (!buf.has_played) ? buf.play_position : 0; |
| 329 | state.next_sample_number = state.current_sample_number; | 320 | state.next_sample_number = state.current_sample_number; |
diff --git a/src/audio_core/hle/source.h b/src/audio_core/hle/source.h index ccb7f064f..c4d2debc2 100644 --- a/src/audio_core/hle/source.h +++ b/src/audio_core/hle/source.h | |||
| @@ -108,7 +108,7 @@ private: | |||
| 108 | 108 | ||
| 109 | u32 current_sample_number = 0; | 109 | u32 current_sample_number = 0; |
| 110 | u32 next_sample_number = 0; | 110 | u32 next_sample_number = 0; |
| 111 | std::vector<std::array<s16, 2>> current_buffer; | 111 | AudioInterp::StereoBuffer16 current_buffer; |
| 112 | 112 | ||
| 113 | // buffer_id state | 113 | // buffer_id state |
| 114 | 114 | ||
diff --git a/src/audio_core/interpolate.cpp b/src/audio_core/interpolate.cpp index 8a5d4181a..83573d772 100644 --- a/src/audio_core/interpolate.cpp +++ b/src/audio_core/interpolate.cpp | |||
| @@ -13,74 +13,64 @@ namespace AudioInterp { | |||
| 13 | constexpr u64 scale_factor = 1 << 24; | 13 | constexpr u64 scale_factor = 1 << 24; |
| 14 | constexpr u64 scale_mask = scale_factor - 1; | 14 | constexpr u64 scale_mask = scale_factor - 1; |
| 15 | 15 | ||
| 16 | /// Here we step over the input in steps of rate_multiplier, until we consume all of the input. | 16 | /// Here we step over the input in steps of rate, until we consume all of the input. |
| 17 | /// Three adjacent samples are passed to fn each step. | 17 | /// Three adjacent samples are passed to fn each step. |
| 18 | template <typename Function> | 18 | template <typename Function> |
| 19 | static StereoBuffer16 StepOverSamples(State& state, const StereoBuffer16& input, | 19 | static void StepOverSamples(State& state, StereoBuffer16& input, float rate, |
| 20 | float rate_multiplier, Function fn) { | 20 | DSP::HLE::StereoFrame16& output, size_t& outputi, Function fn) { |
| 21 | ASSERT(rate_multiplier > 0); | 21 | ASSERT(rate > 0); |
| 22 | 22 | ||
| 23 | if (input.size() < 2) | 23 | if (input.empty()) |
| 24 | return {}; | 24 | return; |
| 25 | 25 | ||
| 26 | StereoBuffer16 output; | 26 | input.insert(input.begin(), {state.xn2, state.xn1}); |
| 27 | output.reserve(static_cast<size_t>(input.size() / rate_multiplier)); | ||
| 28 | 27 | ||
| 29 | u64 step_size = static_cast<u64>(rate_multiplier * scale_factor); | 28 | const u64 step_size = static_cast<u64>(rate * scale_factor); |
| 29 | u64 fposition = state.fposition; | ||
| 30 | size_t inputi = 0; | ||
| 30 | 31 | ||
| 31 | u64 fposition = 0; | 32 | while (outputi < output.size()) { |
| 32 | const u64 max_fposition = input.size() * scale_factor; | 33 | inputi = static_cast<size_t>(fposition / scale_factor); |
| 33 | 34 | ||
| 34 | while (fposition < 1 * scale_factor) { | 35 | if (inputi + 2 >= input.size()) { |
| 35 | u64 fraction = fposition & scale_mask; | 36 | inputi = input.size() - 2; |
| 36 | 37 | break; | |
| 37 | output.push_back(fn(fraction, state.xn2, state.xn1, input[0])); | 38 | } |
| 38 | |||
| 39 | fposition += step_size; | ||
| 40 | } | ||
| 41 | |||
| 42 | while (fposition < 2 * scale_factor) { | ||
| 43 | u64 fraction = fposition & scale_mask; | ||
| 44 | |||
| 45 | output.push_back(fn(fraction, state.xn1, input[0], input[1])); | ||
| 46 | |||
| 47 | fposition += step_size; | ||
| 48 | } | ||
| 49 | 39 | ||
| 50 | while (fposition < max_fposition) { | ||
| 51 | u64 fraction = fposition & scale_mask; | 40 | u64 fraction = fposition & scale_mask; |
| 52 | 41 | output[outputi++] = fn(fraction, input[inputi], input[inputi + 1], input[inputi + 2]); | |
| 53 | size_t index = static_cast<size_t>(fposition / scale_factor); | ||
| 54 | output.push_back(fn(fraction, input[index - 2], input[index - 1], input[index])); | ||
| 55 | 42 | ||
| 56 | fposition += step_size; | 43 | fposition += step_size; |
| 57 | } | 44 | } |
| 58 | 45 | ||
| 59 | state.xn2 = input[input.size() - 2]; | 46 | state.xn2 = input[inputi]; |
| 60 | state.xn1 = input[input.size() - 1]; | 47 | state.xn1 = input[inputi + 1]; |
| 48 | state.fposition = fposition - inputi * scale_factor; | ||
| 61 | 49 | ||
| 62 | return output; | 50 | input.erase(input.begin(), std::next(input.begin(), inputi + 2)); |
| 63 | } | 51 | } |
| 64 | 52 | ||
| 65 | StereoBuffer16 None(State& state, const StereoBuffer16& input, float rate_multiplier) { | 53 | void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, |
| 66 | return StepOverSamples( | 54 | size_t& outputi) { |
| 67 | state, input, rate_multiplier, | 55 | StepOverSamples( |
| 56 | state, input, rate, output, outputi, | ||
| 68 | [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { return x0; }); | 57 | [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { return x0; }); |
| 69 | } | 58 | } |
| 70 | 59 | ||
| 71 | StereoBuffer16 Linear(State& state, const StereoBuffer16& input, float rate_multiplier) { | 60 | void Linear(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, |
| 61 | size_t& outputi) { | ||
| 72 | // Note on accuracy: Some values that this produces are +/- 1 from the actual firmware. | 62 | // Note on accuracy: Some values that this produces are +/- 1 from the actual firmware. |
| 73 | return StepOverSamples(state, input, rate_multiplier, | 63 | StepOverSamples(state, input, rate, output, outputi, |
| 74 | [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { | 64 | [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { |
| 75 | // This is a saturated subtraction. (Verified by black-box fuzzing.) | 65 | // This is a saturated subtraction. (Verified by black-box fuzzing.) |
| 76 | s64 delta0 = MathUtil::Clamp<s64>(x1[0] - x0[0], -32768, 32767); | 66 | s64 delta0 = MathUtil::Clamp<s64>(x1[0] - x0[0], -32768, 32767); |
| 77 | s64 delta1 = MathUtil::Clamp<s64>(x1[1] - x0[1], -32768, 32767); | 67 | s64 delta1 = MathUtil::Clamp<s64>(x1[1] - x0[1], -32768, 32767); |
| 78 | 68 | ||
| 79 | return std::array<s16, 2>{ | 69 | return std::array<s16, 2>{ |
| 80 | static_cast<s16>(x0[0] + fraction * delta0 / scale_factor), | 70 | static_cast<s16>(x0[0] + fraction * delta0 / scale_factor), |
| 81 | static_cast<s16>(x0[1] + fraction * delta1 / scale_factor), | 71 | static_cast<s16>(x0[1] + fraction * delta1 / scale_factor), |
| 82 | }; | 72 | }; |
| 83 | }); | 73 | }); |
| 84 | } | 74 | } |
| 85 | 75 | ||
| 86 | } // namespace AudioInterp | 76 | } // namespace AudioInterp |
diff --git a/src/audio_core/interpolate.h b/src/audio_core/interpolate.h index 19a7b66cb..8dff6111a 100644 --- a/src/audio_core/interpolate.h +++ b/src/audio_core/interpolate.h | |||
| @@ -5,40 +5,45 @@ | |||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <array> | 7 | #include <array> |
| 8 | #include <vector> | 8 | #include <deque> |
| 9 | #include "audio_core/hle/common.h" | ||
| 9 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 10 | 11 | ||
| 11 | namespace AudioInterp { | 12 | namespace AudioInterp { |
| 12 | 13 | ||
| 13 | /// A variable length buffer of signed PCM16 stereo samples. | 14 | /// A variable length buffer of signed PCM16 stereo samples. |
| 14 | using StereoBuffer16 = std::vector<std::array<s16, 2>>; | 15 | using StereoBuffer16 = std::deque<std::array<s16, 2>>; |
| 15 | 16 | ||
| 16 | struct State { | 17 | struct State { |
| 17 | // Two historical samples. | 18 | /// Two historical samples. |
| 18 | std::array<s16, 2> xn1 = {}; ///< x[n-1] | 19 | std::array<s16, 2> xn1 = {}; ///< x[n-1] |
| 19 | std::array<s16, 2> xn2 = {}; ///< x[n-2] | 20 | std::array<s16, 2> xn2 = {}; ///< x[n-2] |
| 21 | /// Current fractional position. | ||
| 22 | u64 fposition = 0; | ||
| 20 | }; | 23 | }; |
| 21 | 24 | ||
| 22 | /** | 25 | /** |
| 23 | * No interpolation. This is equivalent to a zero-order hold. There is a two-sample predelay. | 26 | * No interpolation. This is equivalent to a zero-order hold. There is a two-sample predelay. |
| 24 | * @param state Interpolation state. | 27 | * @param state Interpolation state. |
| 25 | * @param input Input buffer. | 28 | * @param input Input buffer. |
| 26 | * @param rate_multiplier Stretch factor. Must be a positive non-zero value. | 29 | * @param rate Stretch factor. Must be a positive non-zero value. |
| 27 | * rate_multiplier > 1.0 performs decimation and rate_multipler < 1.0 | 30 | * rate > 1.0 performs decimation and rate < 1.0 performs upsampling. |
| 28 | * performs upsampling. | 31 | * @param output The resampled audio buffer. |
| 29 | * @return The resampled audio buffer. | 32 | * @param outputi The index of output to start writing to. |
| 30 | */ | 33 | */ |
| 31 | StereoBuffer16 None(State& state, const StereoBuffer16& input, float rate_multiplier); | 34 | void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, |
| 35 | size_t& outputi); | ||
| 32 | 36 | ||
| 33 | /** | 37 | /** |
| 34 | * Linear interpolation. This is equivalent to a first-order hold. There is a two-sample predelay. | 38 | * Linear interpolation. This is equivalent to a first-order hold. There is a two-sample predelay. |
| 35 | * @param state Interpolation state. | 39 | * @param state Interpolation state. |
| 36 | * @param input Input buffer. | 40 | * @param input Input buffer. |
| 37 | * @param rate_multiplier Stretch factor. Must be a positive non-zero value. | 41 | * @param rate Stretch factor. Must be a positive non-zero value. |
| 38 | * rate_multiplier > 1.0 performs decimation and rate_multipler < 1.0 | 42 | * rate > 1.0 performs decimation and rate < 1.0 performs upsampling. |
| 39 | * performs upsampling. | 43 | * @param output The resampled audio buffer. |
| 40 | * @return The resampled audio buffer. | 44 | * @param outputi The index of output to start writing to. |
| 41 | */ | 45 | */ |
| 42 | StereoBuffer16 Linear(State& state, const StereoBuffer16& input, float rate_multiplier); | 46 | void Linear(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, |
| 47 | size_t& outputi); | ||
| 43 | 48 | ||
| 44 | } // namespace AudioInterp | 49 | } // namespace AudioInterp |
diff --git a/src/citra/citra.cpp b/src/citra/citra.cpp index 14574e56c..e524c5535 100644 --- a/src/citra/citra.cpp +++ b/src/citra/citra.cpp | |||
| @@ -165,6 +165,8 @@ int main(int argc, char** argv) { | |||
| 165 | break; // Expected case | 165 | break; // Expected case |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | Core::Telemetry().AddField(Telemetry::FieldType::App, "Frontend", "SDL"); | ||
| 169 | |||
| 168 | while (emu_window->IsOpen()) { | 170 | while (emu_window->IsOpen()) { |
| 169 | system.RunLoop(); | 171 | system.RunLoop(); |
| 170 | } | 172 | } |
diff --git a/src/citra/citra.rc b/src/citra/citra.rc index fea603004..c490ef302 100644 --- a/src/citra/citra.rc +++ b/src/citra/citra.rc | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | #include "winresrc.h" | ||
| 1 | ///////////////////////////////////////////////////////////////////////////// | 2 | ///////////////////////////////////////////////////////////////////////////// |
| 2 | // | 3 | // |
| 3 | // Icon | 4 | // Icon |
| @@ -7,3 +8,10 @@ | |||
| 7 | // remains consistent on all systems. | 8 | // remains consistent on all systems. |
| 8 | CITRA_ICON ICON "../../dist/citra.ico" | 9 | CITRA_ICON ICON "../../dist/citra.ico" |
| 9 | 10 | ||
| 11 | |||
| 12 | ///////////////////////////////////////////////////////////////////////////// | ||
| 13 | // | ||
| 14 | // RT_MANIFEST | ||
| 15 | // | ||
| 16 | |||
| 17 | 1 RT_MANIFEST "../../dist/citra.manifest" | ||
diff --git a/src/citra/config.cpp b/src/citra/config.cpp index 69247b166..45c28ad09 100644 --- a/src/citra/config.cpp +++ b/src/citra/config.cpp | |||
| @@ -76,6 +76,11 @@ void Config::ReadValues() { | |||
| 76 | Settings::values.analogs[i] = default_param; | 76 | Settings::values.analogs[i] = default_param; |
| 77 | } | 77 | } |
| 78 | 78 | ||
| 79 | Settings::values.motion_device = sdl2_config->Get( | ||
| 80 | "Controls", "motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01"); | ||
| 81 | Settings::values.touch_device = | ||
| 82 | sdl2_config->Get("Controls", "touch_device", "engine:emu_window"); | ||
| 83 | |||
| 79 | // Core | 84 | // Core |
| 80 | Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); | 85 | Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); |
| 81 | 86 | ||
| @@ -153,8 +158,14 @@ void Config::ReadValues() { | |||
| 153 | static_cast<u16>(sdl2_config->GetInteger("Debugging", "gdbstub_port", 24689)); | 158 | static_cast<u16>(sdl2_config->GetInteger("Debugging", "gdbstub_port", 24689)); |
| 154 | 159 | ||
| 155 | // Web Service | 160 | // Web Service |
| 161 | Settings::values.enable_telemetry = | ||
| 162 | sdl2_config->GetBoolean("WebService", "enable_telemetry", true); | ||
| 156 | Settings::values.telemetry_endpoint_url = sdl2_config->Get( | 163 | Settings::values.telemetry_endpoint_url = sdl2_config->Get( |
| 157 | "WebService", "telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry"); | 164 | "WebService", "telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry"); |
| 165 | Settings::values.verify_endpoint_url = sdl2_config->Get( | ||
| 166 | "WebService", "verify_endpoint_url", "https://services.citra-emu.org/api/profile"); | ||
| 167 | Settings::values.citra_username = sdl2_config->Get("WebService", "citra_username", ""); | ||
| 168 | Settings::values.citra_token = sdl2_config->Get("WebService", "citra_token", ""); | ||
| 158 | } | 169 | } |
| 159 | 170 | ||
| 160 | void Config::Reload() { | 171 | void Config::Reload() { |
diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index a12498e0f..59faf773f 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h | |||
| @@ -12,7 +12,7 @@ const char* sdl2_config_file = R"( | |||
| 12 | # It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..." | 12 | # It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..." |
| 13 | # Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values | 13 | # Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values |
| 14 | 14 | ||
| 15 | # for button input, the following devices are avaible: | 15 | # for button input, the following devices are available: |
| 16 | # - "keyboard" (default) for keyboard input. Required parameters: | 16 | # - "keyboard" (default) for keyboard input. Required parameters: |
| 17 | # - "code": the code of the key to bind | 17 | # - "code": the code of the key to bind |
| 18 | # - "sdl" for joystick input using SDL. Required parameters: | 18 | # - "sdl" for joystick input using SDL. Required parameters: |
| @@ -21,7 +21,7 @@ const char* sdl2_config_file = R"( | |||
| 21 | # - "hat"(optional): the index of the hat to bind as direction buttons | 21 | # - "hat"(optional): the index of the hat to bind as direction buttons |
| 22 | # - "axis"(optional): the index of the axis to bind | 22 | # - "axis"(optional): the index of the axis to bind |
| 23 | # - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", "down", "left" or "right" | 23 | # - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", "down", "left" or "right" |
| 24 | # - "threshould"(only used for axis): a float value in (-1.0, 1.0) which the button is | 24 | # - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is |
| 25 | # triggered if the axis value crosses | 25 | # triggered if the axis value crosses |
| 26 | # - "direction"(only used for axis): "+" means the button is triggered when the axis value | 26 | # - "direction"(only used for axis): "+" means the button is triggered when the axis value |
| 27 | # is greater than the threshold; "-" means the button is triggered when the axis value | 27 | # is greater than the threshold; "-" means the button is triggered when the axis value |
| @@ -42,8 +42,8 @@ button_zl= | |||
| 42 | button_zr= | 42 | button_zr= |
| 43 | button_home= | 43 | button_home= |
| 44 | 44 | ||
| 45 | # for analog input, the following devices are avaible: | 45 | # for analog input, the following devices are available: |
| 46 | # - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters: | 46 | # - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters: |
| 47 | # - "up", "down", "left", "right": sub-devices for each direction. | 47 | # - "up", "down", "left", "right": sub-devices for each direction. |
| 48 | # Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00" | 48 | # Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00" |
| 49 | # - "modifier": sub-devices as a modifier. | 49 | # - "modifier": sub-devices as a modifier. |
| @@ -56,6 +56,16 @@ button_home= | |||
| 56 | circle_pad= | 56 | circle_pad= |
| 57 | c_stick= | 57 | c_stick= |
| 58 | 58 | ||
| 59 | # for motion input, the following devices are available: | ||
| 60 | # - "motion_emu" (default) for emulating motion input from mouse input. Required parameters: | ||
| 61 | # - "update_period": update period in milliseconds (default to 100) | ||
| 62 | # - "sensitivity": the coefficient converting mouse movement to tilting angle (default to 0.01) | ||
| 63 | motion_device= | ||
| 64 | |||
| 65 | # for touch input, the following devices are available: | ||
| 66 | # - "emu_window" (default) for emulating touch input from mouse input to the emulation window. No parameters required | ||
| 67 | touch_device= | ||
| 68 | |||
| 59 | [Core] | 69 | [Core] |
| 60 | # Whether to use the Just-In-Time (JIT) compiler for CPU emulation | 70 | # Whether to use the Just-In-Time (JIT) compiler for CPU emulation |
| 61 | # 0: Interpreter (slow), 1 (default): JIT (fast) | 71 | # 0: Interpreter (slow), 1 (default): JIT (fast) |
| @@ -170,7 +180,16 @@ use_gdbstub=false | |||
| 170 | gdbstub_port=24689 | 180 | gdbstub_port=24689 |
| 171 | 181 | ||
| 172 | [WebService] | 182 | [WebService] |
| 183 | # Whether or not to enable telemetry | ||
| 184 | # 0: No, 1 (default): Yes | ||
| 185 | enable_telemetry = | ||
| 173 | # Endpoint URL for submitting telemetry data | 186 | # Endpoint URL for submitting telemetry data |
| 174 | telemetry_endpoint_url = | 187 | telemetry_endpoint_url = https://services.citra-emu.org/api/telemetry |
| 188 | # Endpoint URL to verify the username and token | ||
| 189 | verify_endpoint_url = https://services.citra-emu.org/api/profile | ||
| 190 | # Username and token for Citra Web Service | ||
| 191 | # See https://services.citra-emu.org/ for more info | ||
| 192 | citra_username = | ||
| 193 | citra_token = | ||
| 175 | )"; | 194 | )"; |
| 176 | } | 195 | } |
diff --git a/src/citra/emu_window/emu_window_sdl2.cpp b/src/citra/emu_window/emu_window_sdl2.cpp index b0f808399..25643715a 100644 --- a/src/citra/emu_window/emu_window_sdl2.cpp +++ b/src/citra/emu_window/emu_window_sdl2.cpp | |||
| @@ -16,11 +16,12 @@ | |||
| 16 | #include "core/settings.h" | 16 | #include "core/settings.h" |
| 17 | #include "input_common/keyboard.h" | 17 | #include "input_common/keyboard.h" |
| 18 | #include "input_common/main.h" | 18 | #include "input_common/main.h" |
| 19 | #include "input_common/motion_emu.h" | ||
| 19 | #include "network/network.h" | 20 | #include "network/network.h" |
| 20 | 21 | ||
| 21 | void EmuWindow_SDL2::OnMouseMotion(s32 x, s32 y) { | 22 | void EmuWindow_SDL2::OnMouseMotion(s32 x, s32 y) { |
| 22 | TouchMoved((unsigned)std::max(x, 0), (unsigned)std::max(y, 0)); | 23 | TouchMoved((unsigned)std::max(x, 0), (unsigned)std::max(y, 0)); |
| 23 | motion_emu->Tilt(x, y); | 24 | InputCommon::GetMotionEmu()->Tilt(x, y); |
| 24 | } | 25 | } |
| 25 | 26 | ||
| 26 | void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { | 27 | void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { |
| @@ -32,9 +33,9 @@ void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { | |||
| 32 | } | 33 | } |
| 33 | } else if (button == SDL_BUTTON_RIGHT) { | 34 | } else if (button == SDL_BUTTON_RIGHT) { |
| 34 | if (state == SDL_PRESSED) { | 35 | if (state == SDL_PRESSED) { |
| 35 | motion_emu->BeginTilt(x, y); | 36 | InputCommon::GetMotionEmu()->BeginTilt(x, y); |
| 36 | } else { | 37 | } else { |
| 37 | motion_emu->EndTilt(); | 38 | InputCommon::GetMotionEmu()->EndTilt(); |
| 38 | } | 39 | } |
| 39 | } | 40 | } |
| 40 | } | 41 | } |
| @@ -61,8 +62,6 @@ EmuWindow_SDL2::EmuWindow_SDL2() { | |||
| 61 | InputCommon::Init(); | 62 | InputCommon::Init(); |
| 62 | Network::Init(); | 63 | Network::Init(); |
| 63 | 64 | ||
| 64 | motion_emu = std::make_unique<Motion::MotionEmu>(*this); | ||
| 65 | |||
| 66 | SDL_SetMainReady(); | 65 | SDL_SetMainReady(); |
| 67 | 66 | ||
| 68 | // Initialize the window | 67 | // Initialize the window |
| @@ -117,7 +116,6 @@ EmuWindow_SDL2::EmuWindow_SDL2() { | |||
| 117 | EmuWindow_SDL2::~EmuWindow_SDL2() { | 116 | EmuWindow_SDL2::~EmuWindow_SDL2() { |
| 118 | SDL_GL_DeleteContext(gl_context); | 117 | SDL_GL_DeleteContext(gl_context); |
| 119 | SDL_Quit(); | 118 | SDL_Quit(); |
| 120 | motion_emu = nullptr; | ||
| 121 | 119 | ||
| 122 | Network::Shutdown(); | 120 | Network::Shutdown(); |
| 123 | InputCommon::Shutdown(); | 121 | InputCommon::Shutdown(); |
diff --git a/src/citra/emu_window/emu_window_sdl2.h b/src/citra/emu_window/emu_window_sdl2.h index 1ce2991f7..3664d2fbe 100644 --- a/src/citra/emu_window/emu_window_sdl2.h +++ b/src/citra/emu_window/emu_window_sdl2.h | |||
| @@ -7,7 +7,6 @@ | |||
| 7 | #include <memory> | 7 | #include <memory> |
| 8 | #include <utility> | 8 | #include <utility> |
| 9 | #include "core/frontend/emu_window.h" | 9 | #include "core/frontend/emu_window.h" |
| 10 | #include "core/frontend/motion_emu.h" | ||
| 11 | 10 | ||
| 12 | struct SDL_Window; | 11 | struct SDL_Window; |
| 13 | 12 | ||
| @@ -57,7 +56,4 @@ private: | |||
| 57 | using SDL_GLContext = void*; | 56 | using SDL_GLContext = void*; |
| 58 | /// The OpenGL context associated with the window | 57 | /// The OpenGL context associated with the window |
| 59 | SDL_GLContext gl_context; | 58 | SDL_GLContext gl_context; |
| 60 | |||
| 61 | /// Motion sensors emulation | ||
| 62 | std::unique_ptr<Motion::MotionEmu> motion_emu; | ||
| 63 | }; | 59 | }; |
diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index f364b2284..add7566c2 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt | |||
| @@ -12,6 +12,7 @@ set(SRCS | |||
| 12 | configuration/configure_graphics.cpp | 12 | configuration/configure_graphics.cpp |
| 13 | configuration/configure_input.cpp | 13 | configuration/configure_input.cpp |
| 14 | configuration/configure_system.cpp | 14 | configuration/configure_system.cpp |
| 15 | configuration/configure_web.cpp | ||
| 15 | debugger/graphics/graphics.cpp | 16 | debugger/graphics/graphics.cpp |
| 16 | debugger/graphics/graphics_breakpoint_observer.cpp | 17 | debugger/graphics/graphics_breakpoint_observer.cpp |
| 17 | debugger/graphics/graphics_breakpoints.cpp | 18 | debugger/graphics/graphics_breakpoints.cpp |
| @@ -42,6 +43,7 @@ set(HEADERS | |||
| 42 | configuration/configure_graphics.h | 43 | configuration/configure_graphics.h |
| 43 | configuration/configure_input.h | 44 | configuration/configure_input.h |
| 44 | configuration/configure_system.h | 45 | configuration/configure_system.h |
| 46 | configuration/configure_web.h | ||
| 45 | debugger/graphics/graphics.h | 47 | debugger/graphics/graphics.h |
| 46 | debugger/graphics/graphics_breakpoint_observer.h | 48 | debugger/graphics/graphics_breakpoint_observer.h |
| 47 | debugger/graphics/graphics_breakpoints.h | 49 | debugger/graphics/graphics_breakpoints.h |
| @@ -71,11 +73,13 @@ set(UIS | |||
| 71 | configuration/configure_graphics.ui | 73 | configuration/configure_graphics.ui |
| 72 | configuration/configure_input.ui | 74 | configuration/configure_input.ui |
| 73 | configuration/configure_system.ui | 75 | configuration/configure_system.ui |
| 76 | configuration/configure_web.ui | ||
| 74 | debugger/registers.ui | 77 | debugger/registers.ui |
| 75 | hotkeys.ui | 78 | hotkeys.ui |
| 76 | main.ui | 79 | main.ui |
| 77 | ) | 80 | ) |
| 78 | 81 | ||
| 82 | file(GLOB_RECURSE ICONS ${CMAKE_SOURCE_DIR}/dist/icons/*) | ||
| 79 | file(GLOB_RECURSE THEMES ${CMAKE_SOURCE_DIR}/dist/qt_themes/*) | 83 | file(GLOB_RECURSE THEMES ${CMAKE_SOURCE_DIR}/dist/qt_themes/*) |
| 80 | 84 | ||
| 81 | create_directory_groups(${SRCS} ${HEADERS} ${UIS}) | 85 | create_directory_groups(${SRCS} ${HEADERS} ${UIS}) |
| @@ -89,10 +93,10 @@ endif() | |||
| 89 | if (APPLE) | 93 | if (APPLE) |
| 90 | set(MACOSX_ICON "../../dist/citra.icns") | 94 | set(MACOSX_ICON "../../dist/citra.icns") |
| 91 | set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) | 95 | set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) |
| 92 | add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS} ${THEMES} ${MACOSX_ICON}) | 96 | add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS} ${ICONS} ${THEMES} ${MACOSX_ICON}) |
| 93 | set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) | 97 | set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) |
| 94 | else() | 98 | else() |
| 95 | add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS} ${THEMES}) | 99 | add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS} ${ICONS} ${THEMES}) |
| 96 | endif() | 100 | endif() |
| 97 | target_link_libraries(citra-qt PRIVATE audio_core common core input_common network video_core) | 101 | target_link_libraries(citra-qt PRIVATE audio_core common core input_common network video_core) |
| 98 | target_link_libraries(citra-qt PRIVATE Boost::boost glad nihstro-headers Qt5::OpenGL Qt5::Widgets) | 102 | target_link_libraries(citra-qt PRIVATE Boost::boost glad nihstro-headers Qt5::OpenGL Qt5::Widgets) |
diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp index 30554890f..7107bfc60 100644 --- a/src/citra_qt/bootmanager.cpp +++ b/src/citra_qt/bootmanager.cpp | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include "core/settings.h" | 17 | #include "core/settings.h" |
| 18 | #include "input_common/keyboard.h" | 18 | #include "input_common/keyboard.h" |
| 19 | #include "input_common/main.h" | 19 | #include "input_common/main.h" |
| 20 | #include "input_common/motion_emu.h" | ||
| 20 | #include "network/network.h" | 21 | #include "network/network.h" |
| 21 | 22 | ||
| 22 | EmuThread::EmuThread(GRenderWindow* render_window) | 23 | EmuThread::EmuThread(GRenderWindow* render_window) |
| @@ -201,7 +202,6 @@ qreal GRenderWindow::windowPixelRatio() { | |||
| 201 | } | 202 | } |
| 202 | 203 | ||
| 203 | void GRenderWindow::closeEvent(QCloseEvent* event) { | 204 | void GRenderWindow::closeEvent(QCloseEvent* event) { |
| 204 | motion_emu = nullptr; | ||
| 205 | emit Closed(); | 205 | emit Closed(); |
| 206 | QWidget::closeEvent(event); | 206 | QWidget::closeEvent(event); |
| 207 | } | 207 | } |
| @@ -221,7 +221,7 @@ void GRenderWindow::mousePressEvent(QMouseEvent* event) { | |||
| 221 | this->TouchPressed(static_cast<unsigned>(pos.x() * pixelRatio), | 221 | this->TouchPressed(static_cast<unsigned>(pos.x() * pixelRatio), |
| 222 | static_cast<unsigned>(pos.y() * pixelRatio)); | 222 | static_cast<unsigned>(pos.y() * pixelRatio)); |
| 223 | } else if (event->button() == Qt::RightButton) { | 223 | } else if (event->button() == Qt::RightButton) { |
| 224 | motion_emu->BeginTilt(pos.x(), pos.y()); | 224 | InputCommon::GetMotionEmu()->BeginTilt(pos.x(), pos.y()); |
| 225 | } | 225 | } |
| 226 | } | 226 | } |
| 227 | 227 | ||
| @@ -230,14 +230,14 @@ void GRenderWindow::mouseMoveEvent(QMouseEvent* event) { | |||
| 230 | qreal pixelRatio = windowPixelRatio(); | 230 | qreal pixelRatio = windowPixelRatio(); |
| 231 | this->TouchMoved(std::max(static_cast<unsigned>(pos.x() * pixelRatio), 0u), | 231 | this->TouchMoved(std::max(static_cast<unsigned>(pos.x() * pixelRatio), 0u), |
| 232 | std::max(static_cast<unsigned>(pos.y() * pixelRatio), 0u)); | 232 | std::max(static_cast<unsigned>(pos.y() * pixelRatio), 0u)); |
| 233 | motion_emu->Tilt(pos.x(), pos.y()); | 233 | InputCommon::GetMotionEmu()->Tilt(pos.x(), pos.y()); |
| 234 | } | 234 | } |
| 235 | 235 | ||
| 236 | void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { | 236 | void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { |
| 237 | if (event->button() == Qt::LeftButton) | 237 | if (event->button() == Qt::LeftButton) |
| 238 | this->TouchReleased(); | 238 | this->TouchReleased(); |
| 239 | else if (event->button() == Qt::RightButton) | 239 | else if (event->button() == Qt::RightButton) |
| 240 | motion_emu->EndTilt(); | 240 | InputCommon::GetMotionEmu()->EndTilt(); |
| 241 | } | 241 | } |
| 242 | 242 | ||
| 243 | void GRenderWindow::focusOutEvent(QFocusEvent* event) { | 243 | void GRenderWindow::focusOutEvent(QFocusEvent* event) { |
| @@ -290,13 +290,11 @@ void GRenderWindow::OnMinimalClientAreaChangeRequest( | |||
| 290 | } | 290 | } |
| 291 | 291 | ||
| 292 | void GRenderWindow::OnEmulationStarting(EmuThread* emu_thread) { | 292 | void GRenderWindow::OnEmulationStarting(EmuThread* emu_thread) { |
| 293 | motion_emu = std::make_unique<Motion::MotionEmu>(*this); | ||
| 294 | this->emu_thread = emu_thread; | 293 | this->emu_thread = emu_thread; |
| 295 | child->DisablePainting(); | 294 | child->DisablePainting(); |
| 296 | } | 295 | } |
| 297 | 296 | ||
| 298 | void GRenderWindow::OnEmulationStopping() { | 297 | void GRenderWindow::OnEmulationStopping() { |
| 299 | motion_emu = nullptr; | ||
| 300 | emu_thread = nullptr; | 298 | emu_thread = nullptr; |
| 301 | child->EnablePainting(); | 299 | child->EnablePainting(); |
| 302 | } | 300 | } |
diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h index 4b3a3b3cc..6974edcbb 100644 --- a/src/citra_qt/bootmanager.h +++ b/src/citra_qt/bootmanager.h | |||
| @@ -12,7 +12,6 @@ | |||
| 12 | #include "common/thread.h" | 12 | #include "common/thread.h" |
| 13 | #include "core/core.h" | 13 | #include "core/core.h" |
| 14 | #include "core/frontend/emu_window.h" | 14 | #include "core/frontend/emu_window.h" |
| 15 | #include "core/frontend/motion_emu.h" | ||
| 16 | 15 | ||
| 17 | class QKeyEvent; | 16 | class QKeyEvent; |
| 18 | class QScreen; | 17 | class QScreen; |
| @@ -158,9 +157,6 @@ private: | |||
| 158 | 157 | ||
| 159 | EmuThread* emu_thread; | 158 | EmuThread* emu_thread; |
| 160 | 159 | ||
| 161 | /// Motion sensors emulation | ||
| 162 | std::unique_ptr<Motion::MotionEmu> motion_emu; | ||
| 163 | |||
| 164 | protected: | 160 | protected: |
| 165 | void showEvent(QShowEvent* event) override; | 161 | void showEvent(QShowEvent* event) override; |
| 166 | }; | 162 | }; |
diff --git a/src/citra_qt/citra-qt.rc b/src/citra_qt/citra-qt.rc index fea603004..a48a9440d 100644 --- a/src/citra_qt/citra-qt.rc +++ b/src/citra_qt/citra-qt.rc | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | #include "winresrc.h" | ||
| 1 | ///////////////////////////////////////////////////////////////////////////// | 2 | ///////////////////////////////////////////////////////////////////////////// |
| 2 | // | 3 | // |
| 3 | // Icon | 4 | // Icon |
| @@ -5,5 +6,14 @@ | |||
| 5 | 6 | ||
| 6 | // Icon with lowest ID value placed first to ensure application icon | 7 | // Icon with lowest ID value placed first to ensure application icon |
| 7 | // remains consistent on all systems. | 8 | // remains consistent on all systems. |
| 8 | CITRA_ICON ICON "../../dist/citra.ico" | 9 | // QT requires that the default application icon is named IDI_ICON1 |
| 9 | 10 | ||
| 11 | IDI_ICON1 ICON "../../dist/citra.ico" | ||
| 12 | |||
| 13 | |||
| 14 | ///////////////////////////////////////////////////////////////////////////// | ||
| 15 | // | ||
| 16 | // RT_MANIFEST | ||
| 17 | // | ||
| 18 | |||
| 19 | 1 RT_MANIFEST "../../dist/citra.manifest" | ||
diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index 75abb4ce6..5261f4c4c 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp | |||
| @@ -57,6 +57,13 @@ void Config::ReadValues() { | |||
| 57 | Settings::values.analogs[i] = default_param; | 57 | Settings::values.analogs[i] = default_param; |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | Settings::values.motion_device = | ||
| 61 | qt_config->value("motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01") | ||
| 62 | .toString() | ||
| 63 | .toStdString(); | ||
| 64 | Settings::values.touch_device = | ||
| 65 | qt_config->value("touch_device", "engine:emu_window").toString().toStdString(); | ||
| 66 | |||
| 60 | qt_config->endGroup(); | 67 | qt_config->endGroup(); |
| 61 | 68 | ||
| 62 | qt_config->beginGroup("Core"); | 69 | qt_config->beginGroup("Core"); |
| @@ -134,10 +141,17 @@ void Config::ReadValues() { | |||
| 134 | qt_config->endGroup(); | 141 | qt_config->endGroup(); |
| 135 | 142 | ||
| 136 | qt_config->beginGroup("WebService"); | 143 | qt_config->beginGroup("WebService"); |
| 144 | Settings::values.enable_telemetry = qt_config->value("enable_telemetry", true).toBool(); | ||
| 137 | Settings::values.telemetry_endpoint_url = | 145 | Settings::values.telemetry_endpoint_url = |
| 138 | qt_config->value("telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry") | 146 | qt_config->value("telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry") |
| 139 | .toString() | 147 | .toString() |
| 140 | .toStdString(); | 148 | .toStdString(); |
| 149 | Settings::values.verify_endpoint_url = | ||
| 150 | qt_config->value("verify_endpoint_url", "https://services.citra-emu.org/api/profile") | ||
| 151 | .toString() | ||
| 152 | .toStdString(); | ||
| 153 | Settings::values.citra_username = qt_config->value("citra_username").toString().toStdString(); | ||
| 154 | Settings::values.citra_token = qt_config->value("citra_token").toString().toStdString(); | ||
| 141 | qt_config->endGroup(); | 155 | qt_config->endGroup(); |
| 142 | 156 | ||
| 143 | qt_config->beginGroup("UI"); | 157 | qt_config->beginGroup("UI"); |
| @@ -189,6 +203,7 @@ void Config::ReadValues() { | |||
| 189 | UISettings::values.show_status_bar = qt_config->value("showStatusBar", true).toBool(); | 203 | UISettings::values.show_status_bar = qt_config->value("showStatusBar", true).toBool(); |
| 190 | UISettings::values.confirm_before_closing = qt_config->value("confirmClose", true).toBool(); | 204 | UISettings::values.confirm_before_closing = qt_config->value("confirmClose", true).toBool(); |
| 191 | UISettings::values.first_start = qt_config->value("firstStart", true).toBool(); | 205 | UISettings::values.first_start = qt_config->value("firstStart", true).toBool(); |
| 206 | UISettings::values.callout_flags = qt_config->value("calloutFlags", 0).toUInt(); | ||
| 192 | 207 | ||
| 193 | qt_config->endGroup(); | 208 | qt_config->endGroup(); |
| 194 | } | 209 | } |
| @@ -203,6 +218,8 @@ void Config::SaveValues() { | |||
| 203 | qt_config->setValue(QString::fromStdString(Settings::NativeAnalog::mapping[i]), | 218 | qt_config->setValue(QString::fromStdString(Settings::NativeAnalog::mapping[i]), |
| 204 | QString::fromStdString(Settings::values.analogs[i])); | 219 | QString::fromStdString(Settings::values.analogs[i])); |
| 205 | } | 220 | } |
| 221 | qt_config->setValue("motion_device", QString::fromStdString(Settings::values.motion_device)); | ||
| 222 | qt_config->setValue("touch_device", QString::fromStdString(Settings::values.touch_device)); | ||
| 206 | qt_config->endGroup(); | 223 | qt_config->endGroup(); |
| 207 | 224 | ||
| 208 | qt_config->beginGroup("Core"); | 225 | qt_config->beginGroup("Core"); |
| @@ -277,8 +294,13 @@ void Config::SaveValues() { | |||
| 277 | qt_config->endGroup(); | 294 | qt_config->endGroup(); |
| 278 | 295 | ||
| 279 | qt_config->beginGroup("WebService"); | 296 | qt_config->beginGroup("WebService"); |
| 297 | qt_config->setValue("enable_telemetry", Settings::values.enable_telemetry); | ||
| 280 | qt_config->setValue("telemetry_endpoint_url", | 298 | qt_config->setValue("telemetry_endpoint_url", |
| 281 | QString::fromStdString(Settings::values.telemetry_endpoint_url)); | 299 | QString::fromStdString(Settings::values.telemetry_endpoint_url)); |
| 300 | qt_config->setValue("verify_endpoint_url", | ||
| 301 | QString::fromStdString(Settings::values.verify_endpoint_url)); | ||
| 302 | qt_config->setValue("citra_username", QString::fromStdString(Settings::values.citra_username)); | ||
| 303 | qt_config->setValue("citra_token", QString::fromStdString(Settings::values.citra_token)); | ||
| 282 | qt_config->endGroup(); | 304 | qt_config->endGroup(); |
| 283 | 305 | ||
| 284 | qt_config->beginGroup("UI"); | 306 | qt_config->beginGroup("UI"); |
| @@ -314,6 +336,7 @@ void Config::SaveValues() { | |||
| 314 | qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); | 336 | qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); |
| 315 | qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing); | 337 | qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing); |
| 316 | qt_config->setValue("firstStart", UISettings::values.first_start); | 338 | qt_config->setValue("firstStart", UISettings::values.first_start); |
| 339 | qt_config->setValue("calloutFlags", UISettings::values.callout_flags); | ||
| 317 | 340 | ||
| 318 | qt_config->endGroup(); | 341 | qt_config->endGroup(); |
| 319 | } | 342 | } |
diff --git a/src/citra_qt/configuration/configure.ui b/src/citra_qt/configuration/configure.ui index 85e206e42..6abd1917e 100644 --- a/src/citra_qt/configuration/configure.ui +++ b/src/citra_qt/configuration/configure.ui | |||
| @@ -6,8 +6,8 @@ | |||
| 6 | <rect> | 6 | <rect> |
| 7 | <x>0</x> | 7 | <x>0</x> |
| 8 | <y>0</y> | 8 | <y>0</y> |
| 9 | <width>441</width> | 9 | <width>740</width> |
| 10 | <height>501</height> | 10 | <height>500</height> |
| 11 | </rect> | 11 | </rect> |
| 12 | </property> | 12 | </property> |
| 13 | <property name="windowTitle"> | 13 | <property name="windowTitle"> |
| @@ -49,6 +49,11 @@ | |||
| 49 | <string>Debug</string> | 49 | <string>Debug</string> |
| 50 | </attribute> | 50 | </attribute> |
| 51 | </widget> | 51 | </widget> |
| 52 | <widget class="ConfigureWeb" name="webTab"> | ||
| 53 | <attribute name="title"> | ||
| 54 | <string>Web</string> | ||
| 55 | </attribute> | ||
| 56 | </widget> | ||
| 52 | </widget> | 57 | </widget> |
| 53 | </item> | 58 | </item> |
| 54 | <item> | 59 | <item> |
| @@ -97,6 +102,12 @@ | |||
| 97 | <header>configuration/configure_graphics.h</header> | 102 | <header>configuration/configure_graphics.h</header> |
| 98 | <container>1</container> | 103 | <container>1</container> |
| 99 | </customwidget> | 104 | </customwidget> |
| 105 | <customwidget> | ||
| 106 | <class>ConfigureWeb</class> | ||
| 107 | <extends>QWidget</extends> | ||
| 108 | <header>configuration/configure_web.h</header> | ||
| 109 | <container>1</container> | ||
| 110 | </customwidget> | ||
| 100 | </customwidgets> | 111 | </customwidgets> |
| 101 | <resources/> | 112 | <resources/> |
| 102 | <connections> | 113 | <connections> |
diff --git a/src/citra_qt/configuration/configure_dialog.cpp b/src/citra_qt/configuration/configure_dialog.cpp index dfc8c03a7..b87dc0e6c 100644 --- a/src/citra_qt/configuration/configure_dialog.cpp +++ b/src/citra_qt/configuration/configure_dialog.cpp | |||
| @@ -23,5 +23,6 @@ void ConfigureDialog::applyConfiguration() { | |||
| 23 | ui->graphicsTab->applyConfiguration(); | 23 | ui->graphicsTab->applyConfiguration(); |
| 24 | ui->audioTab->applyConfiguration(); | 24 | ui->audioTab->applyConfiguration(); |
| 25 | ui->debugTab->applyConfiguration(); | 25 | ui->debugTab->applyConfiguration(); |
| 26 | ui->webTab->applyConfiguration(); | ||
| 26 | Settings::Apply(); | 27 | Settings::Apply(); |
| 27 | } | 28 | } |
diff --git a/src/citra_qt/configuration/configure_graphics.ui b/src/citra_qt/configuration/configure_graphics.ui index 228f2a869..5667b14b6 100644 --- a/src/citra_qt/configuration/configure_graphics.ui +++ b/src/citra_qt/configuration/configure_graphics.ui | |||
| @@ -63,57 +63,57 @@ | |||
| 63 | <widget class="QComboBox" name="resolution_factor_combobox"> | 63 | <widget class="QComboBox" name="resolution_factor_combobox"> |
| 64 | <item> | 64 | <item> |
| 65 | <property name="text"> | 65 | <property name="text"> |
| 66 | <string notr="true">Auto (Window Size)</string> | 66 | <string>Auto (Window Size)</string> |
| 67 | </property> | 67 | </property> |
| 68 | </item> | 68 | </item> |
| 69 | <item> | 69 | <item> |
| 70 | <property name="text"> | 70 | <property name="text"> |
| 71 | <string notr="true">Native (400x240)</string> | 71 | <string>Native (400x240)</string> |
| 72 | </property> | 72 | </property> |
| 73 | </item> | 73 | </item> |
| 74 | <item> | 74 | <item> |
| 75 | <property name="text"> | 75 | <property name="text"> |
| 76 | <string notr="true">2x Native (800x480)</string> | 76 | <string>2x Native (800x480)</string> |
| 77 | </property> | 77 | </property> |
| 78 | </item> | 78 | </item> |
| 79 | <item> | 79 | <item> |
| 80 | <property name="text"> | 80 | <property name="text"> |
| 81 | <string notr="true">3x Native (1200x720)</string> | 81 | <string>3x Native (1200x720)</string> |
| 82 | </property> | 82 | </property> |
| 83 | </item> | 83 | </item> |
| 84 | <item> | 84 | <item> |
| 85 | <property name="text"> | 85 | <property name="text"> |
| 86 | <string notr="true">4x Native (1600x960)</string> | 86 | <string>4x Native (1600x960)</string> |
| 87 | </property> | 87 | </property> |
| 88 | </item> | 88 | </item> |
| 89 | <item> | 89 | <item> |
| 90 | <property name="text"> | 90 | <property name="text"> |
| 91 | <string notr="true">5x Native (2000x1200)</string> | 91 | <string>5x Native (2000x1200)</string> |
| 92 | </property> | 92 | </property> |
| 93 | </item> | 93 | </item> |
| 94 | <item> | 94 | <item> |
| 95 | <property name="text"> | 95 | <property name="text"> |
| 96 | <string notr="true">6x Native (2400x1440)</string> | 96 | <string>6x Native (2400x1440)</string> |
| 97 | </property> | 97 | </property> |
| 98 | </item> | 98 | </item> |
| 99 | <item> | 99 | <item> |
| 100 | <property name="text"> | 100 | <property name="text"> |
| 101 | <string notr="true">7x Native (2800x1680)</string> | 101 | <string>7x Native (2800x1680)</string> |
| 102 | </property> | 102 | </property> |
| 103 | </item> | 103 | </item> |
| 104 | <item> | 104 | <item> |
| 105 | <property name="text"> | 105 | <property name="text"> |
| 106 | <string notr="true">8x Native (3200x1920)</string> | 106 | <string>8x Native (3200x1920)</string> |
| 107 | </property> | 107 | </property> |
| 108 | </item> | 108 | </item> |
| 109 | <item> | 109 | <item> |
| 110 | <property name="text"> | 110 | <property name="text"> |
| 111 | <string notr="true">9x Native (3600x2160)</string> | 111 | <string>9x Native (3600x2160)</string> |
| 112 | </property> | 112 | </property> |
| 113 | </item> | 113 | </item> |
| 114 | <item> | 114 | <item> |
| 115 | <property name="text"> | 115 | <property name="text"> |
| 116 | <string notr="true">10x Native (4000x2400)</string> | 116 | <string>10x Native (4000x2400)</string> |
| 117 | </property> | 117 | </property> |
| 118 | </item> | 118 | </item> |
| 119 | </widget> | 119 | </widget> |
| @@ -146,17 +146,22 @@ | |||
| 146 | <widget class="QComboBox" name="layout_combobox"> | 146 | <widget class="QComboBox" name="layout_combobox"> |
| 147 | <item> | 147 | <item> |
| 148 | <property name="text"> | 148 | <property name="text"> |
| 149 | <string notr="true">Default</string> | 149 | <string>Default</string> |
| 150 | </property> | 150 | </property> |
| 151 | </item> | 151 | </item> |
| 152 | <item> | 152 | <item> |
| 153 | <property name="text"> | 153 | <property name="text"> |
| 154 | <string notr="true">Single Screen</string> | 154 | <string>Single Screen</string> |
| 155 | </property> | 155 | </property> |
| 156 | </item> | 156 | </item> |
| 157 | <item> | 157 | <item> |
| 158 | <property name="text"> | 158 | <property name="text"> |
| 159 | <string notr="true">Large Screen</string> | 159 | <string>Large Screen</string> |
| 160 | </property> | ||
| 161 | </item> | ||
| 162 | <item> | ||
| 163 | <property name="text"> | ||
| 164 | <string>Side by Side</string> | ||
| 160 | </property> | 165 | </property> |
| 161 | </item> | 166 | </item> |
| 162 | </widget> | 167 | </widget> |
diff --git a/src/citra_qt/configuration/configure_system.cpp b/src/citra_qt/configuration/configure_system.cpp index 9b1e6711d..88a067c12 100644 --- a/src/citra_qt/configuration/configure_system.cpp +++ b/src/citra_qt/configuration/configure_system.cpp | |||
| @@ -78,7 +78,8 @@ void ConfigureSystem::ReadSystemSettings() { | |||
| 78 | 78 | ||
| 79 | // set the console id | 79 | // set the console id |
| 80 | u64 console_id = Service::CFG::GetConsoleUniqueId(); | 80 | u64 console_id = Service::CFG::GetConsoleUniqueId(); |
| 81 | ui->label_console_id->setText("Console ID: 0x" + QString::number(console_id, 16).toUpper()); | 81 | ui->label_console_id->setText( |
| 82 | tr("Console ID: 0x%1").arg(QString::number(console_id, 16).toUpper())); | ||
| 82 | } | 83 | } |
| 83 | 84 | ||
| 84 | void ConfigureSystem::applyConfiguration() { | 85 | void ConfigureSystem::applyConfiguration() { |
diff --git a/src/citra_qt/configuration/configure_web.cpp b/src/citra_qt/configuration/configure_web.cpp new file mode 100644 index 000000000..bf8c21ac7 --- /dev/null +++ b/src/citra_qt/configuration/configure_web.cpp | |||
| @@ -0,0 +1,102 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <QMessageBox> | ||
| 6 | #include "citra_qt/configuration/configure_web.h" | ||
| 7 | #include "core/settings.h" | ||
| 8 | #include "core/telemetry_session.h" | ||
| 9 | #include "ui_configure_web.h" | ||
| 10 | |||
| 11 | ConfigureWeb::ConfigureWeb(QWidget* parent) | ||
| 12 | : QWidget(parent), ui(std::make_unique<Ui::ConfigureWeb>()) { | ||
| 13 | ui->setupUi(this); | ||
| 14 | connect(ui->button_regenerate_telemetry_id, &QPushButton::clicked, this, | ||
| 15 | &ConfigureWeb::RefreshTelemetryID); | ||
| 16 | connect(ui->button_verify_login, &QPushButton::clicked, this, &ConfigureWeb::VerifyLogin); | ||
| 17 | connect(this, &ConfigureWeb::LoginVerified, this, &ConfigureWeb::OnLoginVerified); | ||
| 18 | |||
| 19 | this->setConfiguration(); | ||
| 20 | } | ||
| 21 | |||
| 22 | ConfigureWeb::~ConfigureWeb() {} | ||
| 23 | |||
| 24 | void ConfigureWeb::setConfiguration() { | ||
| 25 | ui->web_credentials_disclaimer->setWordWrap(true); | ||
| 26 | ui->telemetry_learn_more->setOpenExternalLinks(true); | ||
| 27 | ui->telemetry_learn_more->setText(tr("<a " | ||
| 28 | "href='https://citra-emu.org/entry/" | ||
| 29 | "telemetry-and-why-thats-a-good-thing/'>Learn more</a>")); | ||
| 30 | |||
| 31 | ui->web_signup_link->setOpenExternalLinks(true); | ||
| 32 | ui->web_signup_link->setText(tr("<a href='https://services.citra-emu.org/'>Sign up</a>")); | ||
| 33 | ui->web_token_info_link->setOpenExternalLinks(true); | ||
| 34 | ui->web_token_info_link->setText( | ||
| 35 | tr("<a href='https://citra-emu.org/wiki/citra-web-service/'>What is my token?</a>")); | ||
| 36 | |||
| 37 | ui->toggle_telemetry->setChecked(Settings::values.enable_telemetry); | ||
| 38 | ui->edit_username->setText(QString::fromStdString(Settings::values.citra_username)); | ||
| 39 | ui->edit_token->setText(QString::fromStdString(Settings::values.citra_token)); | ||
| 40 | // Connect after setting the values, to avoid calling OnLoginChanged now | ||
| 41 | connect(ui->edit_token, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged); | ||
| 42 | connect(ui->edit_username, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged); | ||
| 43 | ui->label_telemetry_id->setText( | ||
| 44 | tr("Telemetry ID: 0x%1").arg(QString::number(Core::GetTelemetryId(), 16).toUpper())); | ||
| 45 | user_verified = true; | ||
| 46 | } | ||
| 47 | |||
| 48 | void ConfigureWeb::applyConfiguration() { | ||
| 49 | Settings::values.enable_telemetry = ui->toggle_telemetry->isChecked(); | ||
| 50 | if (user_verified) { | ||
| 51 | Settings::values.citra_username = ui->edit_username->text().toStdString(); | ||
| 52 | Settings::values.citra_token = ui->edit_token->text().toStdString(); | ||
| 53 | } else { | ||
| 54 | QMessageBox::warning(this, tr("Username and token not verfied"), | ||
| 55 | tr("Username and token were not verified. The changes to your " | ||
| 56 | "username and/or token have not been saved.")); | ||
| 57 | } | ||
| 58 | Settings::Apply(); | ||
| 59 | } | ||
| 60 | |||
| 61 | void ConfigureWeb::RefreshTelemetryID() { | ||
| 62 | const u64 new_telemetry_id{Core::RegenerateTelemetryId()}; | ||
| 63 | ui->label_telemetry_id->setText( | ||
| 64 | tr("Telemetry ID: 0x%1").arg(QString::number(new_telemetry_id, 16).toUpper())); | ||
| 65 | } | ||
| 66 | |||
| 67 | void ConfigureWeb::OnLoginChanged() { | ||
| 68 | if (ui->edit_username->text().isEmpty() && ui->edit_token->text().isEmpty()) { | ||
| 69 | user_verified = true; | ||
| 70 | ui->label_username_verified->setPixmap(QPixmap(":/icons/checked.png")); | ||
| 71 | ui->label_token_verified->setPixmap(QPixmap(":/icons/checked.png")); | ||
| 72 | } else { | ||
| 73 | user_verified = false; | ||
| 74 | ui->label_username_verified->setPixmap(QPixmap(":/icons/failed.png")); | ||
| 75 | ui->label_token_verified->setPixmap(QPixmap(":/icons/failed.png")); | ||
| 76 | } | ||
| 77 | } | ||
| 78 | |||
| 79 | void ConfigureWeb::VerifyLogin() { | ||
| 80 | verified = | ||
| 81 | Core::VerifyLogin(ui->edit_username->text().toStdString(), | ||
| 82 | ui->edit_token->text().toStdString(), [&]() { emit LoginVerified(); }); | ||
| 83 | ui->button_verify_login->setDisabled(true); | ||
| 84 | ui->button_verify_login->setText(tr("Verifying")); | ||
| 85 | } | ||
| 86 | |||
| 87 | void ConfigureWeb::OnLoginVerified() { | ||
| 88 | ui->button_verify_login->setEnabled(true); | ||
| 89 | ui->button_verify_login->setText(tr("Verify")); | ||
| 90 | if (verified.get()) { | ||
| 91 | user_verified = true; | ||
| 92 | ui->label_username_verified->setPixmap(QPixmap(":/icons/checked.png")); | ||
| 93 | ui->label_token_verified->setPixmap(QPixmap(":/icons/checked.png")); | ||
| 94 | } else { | ||
| 95 | ui->label_username_verified->setPixmap(QPixmap(":/icons/failed.png")); | ||
| 96 | ui->label_token_verified->setPixmap(QPixmap(":/icons/failed.png")); | ||
| 97 | QMessageBox::critical( | ||
| 98 | this, tr("Verification failed"), | ||
| 99 | tr("Verification failed. Check that you have entered your username and token " | ||
| 100 | "correctly, and that your internet connection is working.")); | ||
| 101 | } | ||
| 102 | } | ||
diff --git a/src/citra_qt/configuration/configure_web.h b/src/citra_qt/configuration/configure_web.h new file mode 100644 index 000000000..ad2d58f6e --- /dev/null +++ b/src/citra_qt/configuration/configure_web.h | |||
| @@ -0,0 +1,40 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <future> | ||
| 8 | #include <memory> | ||
| 9 | #include <QWidget> | ||
| 10 | |||
| 11 | namespace Ui { | ||
| 12 | class ConfigureWeb; | ||
| 13 | } | ||
| 14 | |||
| 15 | class ConfigureWeb : public QWidget { | ||
| 16 | Q_OBJECT | ||
| 17 | |||
| 18 | public: | ||
| 19 | explicit ConfigureWeb(QWidget* parent = nullptr); | ||
| 20 | ~ConfigureWeb(); | ||
| 21 | |||
| 22 | void applyConfiguration(); | ||
| 23 | |||
| 24 | public slots: | ||
| 25 | void RefreshTelemetryID(); | ||
| 26 | void OnLoginChanged(); | ||
| 27 | void VerifyLogin(); | ||
| 28 | void OnLoginVerified(); | ||
| 29 | |||
| 30 | signals: | ||
| 31 | void LoginVerified(); | ||
| 32 | |||
| 33 | private: | ||
| 34 | void setConfiguration(); | ||
| 35 | |||
| 36 | bool user_verified = true; | ||
| 37 | std::future<bool> verified; | ||
| 38 | |||
| 39 | std::unique_ptr<Ui::ConfigureWeb> ui; | ||
| 40 | }; | ||
diff --git a/src/citra_qt/configuration/configure_web.ui b/src/citra_qt/configuration/configure_web.ui new file mode 100644 index 000000000..dd996ab62 --- /dev/null +++ b/src/citra_qt/configuration/configure_web.ui | |||
| @@ -0,0 +1,190 @@ | |||
| 1 | <?xml version="1.0" encoding="UTF-8"?> | ||
| 2 | <ui version="4.0"> | ||
| 3 | <class>ConfigureWeb</class> | ||
| 4 | <widget class="QWidget" name="ConfigureWeb"> | ||
| 5 | <property name="geometry"> | ||
| 6 | <rect> | ||
| 7 | <x>0</x> | ||
| 8 | <y>0</y> | ||
| 9 | <width>926</width> | ||
| 10 | <height>561</height> | ||
| 11 | </rect> | ||
| 12 | </property> | ||
| 13 | <property name="windowTitle"> | ||
| 14 | <string>Form</string> | ||
| 15 | </property> | ||
| 16 | <layout class="QVBoxLayout" name="verticalLayout"> | ||
| 17 | <item> | ||
| 18 | <layout class="QVBoxLayout" name="verticalLayout_3"> | ||
| 19 | <item> | ||
| 20 | <widget class="QGroupBox" name="groupBoxWebConfig"> | ||
| 21 | <property name="title"> | ||
| 22 | <string>Citra Web Service</string> | ||
| 23 | </property> | ||
| 24 | <layout class="QVBoxLayout" name="verticalLayoutCitraWebService"> | ||
| 25 | <item> | ||
| 26 | <widget class="QLabel" name="web_credentials_disclaimer"> | ||
| 27 | <property name="text"> | ||
| 28 | <string>By providing your username and token, you agree to allow Citra to collect additional usage data, which may include user identifying information.</string> | ||
| 29 | </property> | ||
| 30 | </widget> | ||
| 31 | </item> | ||
| 32 | <item> | ||
| 33 | <layout class="QGridLayout" name="gridLayoutCitraUsername"> | ||
| 34 | <item row="2" column="3"> | ||
| 35 | <widget class="QPushButton" name="button_verify_login"> | ||
| 36 | <property name="sizePolicy"> | ||
| 37 | <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> | ||
| 38 | <horstretch>0</horstretch> | ||
| 39 | <verstretch>0</verstretch> | ||
| 40 | </sizepolicy> | ||
| 41 | </property> | ||
| 42 | <property name="layoutDirection"> | ||
| 43 | <enum>Qt::RightToLeft</enum> | ||
| 44 | </property> | ||
| 45 | <property name="text"> | ||
| 46 | <string>Verify</string> | ||
| 47 | </property> | ||
| 48 | </widget> | ||
| 49 | </item> | ||
| 50 | <item row="2" column="0"> | ||
| 51 | <widget class="QLabel" name="web_signup_link"> | ||
| 52 | <property name="text"> | ||
| 53 | <string>Sign up</string> | ||
| 54 | </property> | ||
| 55 | </widget> | ||
| 56 | </item> | ||
| 57 | <item row="0" column="1" colspan="3"> | ||
| 58 | <widget class="QLineEdit" name="edit_username"> | ||
| 59 | <property name="maxLength"> | ||
| 60 | <number>36</number> | ||
| 61 | </property> | ||
| 62 | </widget> | ||
| 63 | </item> | ||
| 64 | <item row="1" column="0"> | ||
| 65 | <widget class="QLabel" name="label_token"> | ||
| 66 | <property name="text"> | ||
| 67 | <string>Token: </string> | ||
| 68 | </property> | ||
| 69 | </widget> | ||
| 70 | </item> | ||
| 71 | <item row="1" column="4"> | ||
| 72 | <widget class="QLabel" name="label_token_verified"> | ||
| 73 | </widget> | ||
| 74 | </item> | ||
| 75 | <item row="0" column="0"> | ||
| 76 | <widget class="QLabel" name="label_username"> | ||
| 77 | <property name="text"> | ||
| 78 | <string>Username: </string> | ||
| 79 | </property> | ||
| 80 | </widget> | ||
| 81 | </item> | ||
| 82 | <item row="0" column="4"> | ||
| 83 | <widget class="QLabel" name="label_username_verified"> | ||
| 84 | </widget> | ||
| 85 | </item> | ||
| 86 | <item row="1" column="1" colspan="3"> | ||
| 87 | <widget class="QLineEdit" name="edit_token"> | ||
| 88 | <property name="maxLength"> | ||
| 89 | <number>36</number> | ||
| 90 | </property> | ||
| 91 | <property name="echoMode"> | ||
| 92 | <enum>QLineEdit::Password</enum> | ||
| 93 | </property> | ||
| 94 | </widget> | ||
| 95 | </item> | ||
| 96 | <item row="2" column="1"> | ||
| 97 | <widget class="QLabel" name="web_token_info_link"> | ||
| 98 | <property name="text"> | ||
| 99 | <string>What is my token?</string> | ||
| 100 | </property> | ||
| 101 | </widget> | ||
| 102 | </item> | ||
| 103 | <item row="2" column="2"> | ||
| 104 | <spacer name="horizontalSpacer"> | ||
| 105 | <property name="orientation"> | ||
| 106 | <enum>Qt::Horizontal</enum> | ||
| 107 | </property> | ||
| 108 | <property name="sizeHint" stdset="0"> | ||
| 109 | <size> | ||
| 110 | <width>40</width> | ||
| 111 | <height>20</height> | ||
| 112 | </size> | ||
| 113 | </property> | ||
| 114 | </spacer> | ||
| 115 | </item> | ||
| 116 | </layout> | ||
| 117 | </item> | ||
| 118 | </layout> | ||
| 119 | </widget> | ||
| 120 | </item> | ||
| 121 | <item> | ||
| 122 | <widget class="QGroupBox" name="groupBox"> | ||
| 123 | <property name="title"> | ||
| 124 | <string>Telemetry</string> | ||
| 125 | </property> | ||
| 126 | <layout class="QVBoxLayout" name="verticalLayout_2"> | ||
| 127 | <item> | ||
| 128 | <widget class="QCheckBox" name="toggle_telemetry"> | ||
| 129 | <property name="text"> | ||
| 130 | <string>Share anonymous usage data with the Citra team</string> | ||
| 131 | </property> | ||
| 132 | </widget> | ||
| 133 | </item> | ||
| 134 | <item> | ||
| 135 | <widget class="QLabel" name="telemetry_learn_more"> | ||
| 136 | <property name="text"> | ||
| 137 | <string>Learn more</string> | ||
| 138 | </property> | ||
| 139 | </widget> | ||
| 140 | </item> | ||
| 141 | <item> | ||
| 142 | <layout class="QGridLayout" name="gridLayoutTelemetryId"> | ||
| 143 | <item row="0" column="0"> | ||
| 144 | <widget class="QLabel" name="label_telemetry_id"> | ||
| 145 | <property name="text"> | ||
| 146 | <string>Telemetry ID:</string> | ||
| 147 | </property> | ||
| 148 | </widget> | ||
| 149 | </item> | ||
| 150 | <item row="0" column="1"> | ||
| 151 | <widget class="QPushButton" name="button_regenerate_telemetry_id"> | ||
| 152 | <property name="sizePolicy"> | ||
| 153 | <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> | ||
| 154 | <horstretch>0</horstretch> | ||
| 155 | <verstretch>0</verstretch> | ||
| 156 | </sizepolicy> | ||
| 157 | </property> | ||
| 158 | <property name="layoutDirection"> | ||
| 159 | <enum>Qt::RightToLeft</enum> | ||
| 160 | </property> | ||
| 161 | <property name="text"> | ||
| 162 | <string>Regenerate</string> | ||
| 163 | </property> | ||
| 164 | </widget> | ||
| 165 | </item> | ||
| 166 | </layout> | ||
| 167 | </item> | ||
| 168 | </layout> | ||
| 169 | </widget> | ||
| 170 | </item> | ||
| 171 | </layout> | ||
| 172 | </item> | ||
| 173 | <item> | ||
| 174 | <spacer name="verticalSpacer"> | ||
| 175 | <property name="orientation"> | ||
| 176 | <enum>Qt::Vertical</enum> | ||
| 177 | </property> | ||
| 178 | <property name="sizeHint" stdset="0"> | ||
| 179 | <size> | ||
| 180 | <width>20</width> | ||
| 181 | <height>40</height> | ||
| 182 | </size> | ||
| 183 | </property> | ||
| 184 | </spacer> | ||
| 185 | </item> | ||
| 186 | </layout> | ||
| 187 | </widget> | ||
| 188 | <resources/> | ||
| 189 | <connections/> | ||
| 190 | </ui> | ||
diff --git a/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp b/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp index 7d06ec28a..ce2b9fa50 100644 --- a/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp +++ b/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp | |||
| @@ -26,8 +26,8 @@ | |||
| 26 | namespace { | 26 | namespace { |
| 27 | QImage LoadTexture(const u8* src, const Pica::Texture::TextureInfo& info) { | 27 | QImage LoadTexture(const u8* src, const Pica::Texture::TextureInfo& info) { |
| 28 | QImage decoded_image(info.width, info.height, QImage::Format_ARGB32); | 28 | QImage decoded_image(info.width, info.height, QImage::Format_ARGB32); |
| 29 | for (int y = 0; y < info.height; ++y) { | 29 | for (u32 y = 0; y < info.height; ++y) { |
| 30 | for (int x = 0; x < info.width; ++x) { | 30 | for (u32 x = 0; x < info.width; ++x) { |
| 31 | Math::Vec4<u8> color = Pica::Texture::LookupTexture(src, x, y, info, true); | 31 | Math::Vec4<u8> color = Pica::Texture::LookupTexture(src, x, y, info, true); |
| 32 | decoded_image.setPixel(x, y, qRgba(color.r(), color.g(), color.b(), color.a())); | 32 | decoded_image.setPixel(x, y, qRgba(color.r(), color.g(), color.b(), color.a())); |
| 33 | } | 33 | } |
diff --git a/src/citra_qt/debugger/graphics/graphics_surface.cpp b/src/citra_qt/debugger/graphics/graphics_surface.cpp index 47d9924e1..c974545ef 100644 --- a/src/citra_qt/debugger/graphics/graphics_surface.cpp +++ b/src/citra_qt/debugger/graphics/graphics_surface.cpp | |||
| @@ -273,7 +273,8 @@ void GraphicsSurfaceWidget::Pick(int x, int y) { | |||
| 273 | surface_picker_x_control->setValue(x); | 273 | surface_picker_x_control->setValue(x); |
| 274 | surface_picker_y_control->setValue(y); | 274 | surface_picker_y_control->setValue(y); |
| 275 | 275 | ||
| 276 | if (x < 0 || x >= surface_width || y < 0 || y >= surface_height) { | 276 | if (x < 0 || x >= static_cast<int>(surface_width) || y < 0 || |
| 277 | y >= static_cast<int>(surface_height)) { | ||
| 277 | surface_info_label->setText(tr("Pixel out of bounds")); | 278 | surface_info_label->setText(tr("Pixel out of bounds")); |
| 278 | surface_info_label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); | 279 | surface_info_label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); |
| 279 | return; | 280 | return; |
diff --git a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp index e3f3194db..7f4ec0c52 100644 --- a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp +++ b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp | |||
| @@ -183,23 +183,13 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con | |||
| 183 | print_input(output, src1, swizzle.negate_src1, | 183 | print_input(output, src1, swizzle.negate_src1, |
| 184 | SelectorToString(swizzle.src1_selector)); | 184 | SelectorToString(swizzle.src1_selector)); |
| 185 | AlignToColumn(kInputOperandColumnWidth); | 185 | AlignToColumn(kInputOperandColumnWidth); |
| 186 | if (src_is_inverted) { | 186 | print_input(output, src2, swizzle.negate_src2, |
| 187 | print_input(output, src2, swizzle.negate_src2, | 187 | SelectorToString(swizzle.src2_selector), true, |
| 188 | SelectorToString(swizzle.src2_selector)); | 188 | src_is_inverted ? "" : instr.mad.AddressRegisterName()); |
| 189 | } else { | ||
| 190 | print_input(output, src2, swizzle.negate_src2, | ||
| 191 | SelectorToString(swizzle.src2_selector), true, | ||
| 192 | instr.mad.AddressRegisterName()); | ||
| 193 | } | ||
| 194 | AlignToColumn(kInputOperandColumnWidth); | 189 | AlignToColumn(kInputOperandColumnWidth); |
| 195 | if (src_is_inverted) { | 190 | print_input(output, src3, swizzle.negate_src3, |
| 196 | print_input(output, src3, swizzle.negate_src3, | 191 | SelectorToString(swizzle.src3_selector), true, |
| 197 | SelectorToString(swizzle.src3_selector), true, | 192 | src_is_inverted ? instr.mad.AddressRegisterName() : ""); |
| 198 | instr.mad.AddressRegisterName()); | ||
| 199 | } else { | ||
| 200 | print_input(output, src3, swizzle.negate_src3, | ||
| 201 | SelectorToString(swizzle.src3_selector)); | ||
| 202 | } | ||
| 203 | AlignToColumn(kInputOperandColumnWidth); | 193 | AlignToColumn(kInputOperandColumnWidth); |
| 204 | break; | 194 | break; |
| 205 | } | 195 | } |
| @@ -222,16 +212,15 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con | |||
| 222 | SourceRegister src1 = instr.common.GetSrc1(src_is_inverted); | 212 | SourceRegister src1 = instr.common.GetSrc1(src_is_inverted); |
| 223 | print_input(output, src1, swizzle.negate_src1, | 213 | print_input(output, src1, swizzle.negate_src1, |
| 224 | swizzle.SelectorToString(false), true, | 214 | swizzle.SelectorToString(false), true, |
| 225 | instr.common.AddressRegisterName()); | 215 | src_is_inverted ? "" : instr.common.AddressRegisterName()); |
| 226 | AlignToColumn(kInputOperandColumnWidth); | 216 | AlignToColumn(kInputOperandColumnWidth); |
| 227 | } | 217 | } |
| 228 | 218 | ||
| 229 | // TODO: In some cases, the Address Register is used as an index for SRC2 | ||
| 230 | // instead of SRC1 | ||
| 231 | if (opcode_info.subtype & OpCode::Info::Src2) { | 219 | if (opcode_info.subtype & OpCode::Info::Src2) { |
| 232 | SourceRegister src2 = instr.common.GetSrc2(src_is_inverted); | 220 | SourceRegister src2 = instr.common.GetSrc2(src_is_inverted); |
| 233 | print_input(output, src2, swizzle.negate_src2, | 221 | print_input(output, src2, swizzle.negate_src2, |
| 234 | swizzle.SelectorToString(true)); | 222 | swizzle.SelectorToString(true), true, |
| 223 | src_is_inverted ? instr.common.AddressRegisterName() : ""); | ||
| 235 | AlignToColumn(kInputOperandColumnWidth); | 224 | AlignToColumn(kInputOperandColumnWidth); |
| 236 | } | 225 | } |
| 237 | break; | 226 | break; |
| @@ -247,7 +236,9 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con | |||
| 247 | 236 | ||
| 248 | switch (opcode.EffectiveOpCode()) { | 237 | switch (opcode.EffectiveOpCode()) { |
| 249 | case OpCode::Id::LOOP: | 238 | case OpCode::Id::LOOP: |
| 250 | output << "(unknown instruction format)"; | 239 | output << 'i' << instr.flow_control.int_uniform_id << " (end on 0x" |
| 240 | << std::setw(4) << std::right << std::setfill('0') << std::hex | ||
| 241 | << (4 * instr.flow_control.dest_offset) << ")"; | ||
| 251 | break; | 242 | break; |
| 252 | 243 | ||
| 253 | default: | 244 | default: |
| @@ -255,7 +246,7 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con | |||
| 255 | output << '('; | 246 | output << '('; |
| 256 | 247 | ||
| 257 | if (instr.flow_control.op != instr.flow_control.JustY) { | 248 | if (instr.flow_control.op != instr.flow_control.JustY) { |
| 258 | if (instr.flow_control.refx) | 249 | if (!instr.flow_control.refx) |
| 259 | output << '!'; | 250 | output << '!'; |
| 260 | output << "cc.x"; | 251 | output << "cc.x"; |
| 261 | } | 252 | } |
| @@ -267,13 +258,17 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con | |||
| 267 | } | 258 | } |
| 268 | 259 | ||
| 269 | if (instr.flow_control.op != instr.flow_control.JustX) { | 260 | if (instr.flow_control.op != instr.flow_control.JustX) { |
| 270 | if (instr.flow_control.refy) | 261 | if (!instr.flow_control.refy) |
| 271 | output << '!'; | 262 | output << '!'; |
| 272 | output << "cc.y"; | 263 | output << "cc.y"; |
| 273 | } | 264 | } |
| 274 | 265 | ||
| 275 | output << ") "; | 266 | output << ") "; |
| 276 | } else if (opcode_info.subtype & OpCode::Info::HasUniformIndex) { | 267 | } else if (opcode_info.subtype & OpCode::Info::HasUniformIndex) { |
| 268 | if (opcode.EffectiveOpCode() == OpCode::Id::JMPU && | ||
| 269 | (instr.flow_control.num_instructions & 1) == 1) { | ||
| 270 | output << '!'; | ||
| 271 | } | ||
| 277 | output << 'b' << instr.flow_control.bool_uniform_id << ' '; | 272 | output << 'b' << instr.flow_control.bool_uniform_id << ' '; |
| 278 | } | 273 | } |
| 279 | 274 | ||
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 02bfdca3d..8adbcfe86 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp | |||
| @@ -48,6 +48,47 @@ | |||
| 48 | Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); | 48 | Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); |
| 49 | #endif | 49 | #endif |
| 50 | 50 | ||
| 51 | /** | ||
| 52 | * "Callouts" are one-time instructional messages shown to the user. In the config settings, there | ||
| 53 | * is a bitfield "callout_flags" options, used to track if a message has already been shown to the | ||
| 54 | * user. This is 32-bits - if we have more than 32 callouts, we should retire and recyle old ones. | ||
| 55 | */ | ||
| 56 | enum class CalloutFlag : uint32_t { | ||
| 57 | Telemetry = 0x1, | ||
| 58 | }; | ||
| 59 | |||
| 60 | static void ShowCalloutMessage(const QString& message, CalloutFlag flag) { | ||
| 61 | if (UISettings::values.callout_flags & static_cast<uint32_t>(flag)) { | ||
| 62 | return; | ||
| 63 | } | ||
| 64 | |||
| 65 | UISettings::values.callout_flags |= static_cast<uint32_t>(flag); | ||
| 66 | |||
| 67 | QMessageBox msg; | ||
| 68 | msg.setText(message); | ||
| 69 | msg.setStandardButtons(QMessageBox::Ok); | ||
| 70 | msg.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); | ||
| 71 | msg.setStyleSheet("QLabel{min-width: 900px;}"); | ||
| 72 | msg.exec(); | ||
| 73 | } | ||
| 74 | |||
| 75 | void GMainWindow::ShowCallouts() { | ||
| 76 | static const QString telemetry_message = | ||
| 77 | tr("To help improve Citra, the Citra Team collects anonymous usage data. No private or " | ||
| 78 | "personally identifying information is collected. This data helps us to understand how " | ||
| 79 | "people use Citra and prioritize our efforts. Furthermore, it helps us to more easily " | ||
| 80 | "identify emulation bugs and performance issues. This data includes:<ul><li>Information" | ||
| 81 | " about the version of Citra you are using</li><li>Performance data about the games you " | ||
| 82 | "play</li><li>Your configuration settings</li><li>Information about your computer " | ||
| 83 | "hardware</li><li>Emulation errors and crash information</li></ul>By default, this " | ||
| 84 | "feature is enabled. To disable this feature, click 'Emulation' from the menu and then " | ||
| 85 | "select 'Configure...'. Then, on the 'Web' tab, uncheck 'Share anonymous usage data with" | ||
| 86 | " the Citra team'. <br/><br/>By using this software, you agree to the above terms.<br/>" | ||
| 87 | "<br/><a href='https://citra-emu.org/entry/telemetry-and-why-thats-a-good-thing/'>Learn " | ||
| 88 | "more</a>"); | ||
| 89 | ShowCalloutMessage(telemetry_message, CalloutFlag::Telemetry); | ||
| 90 | } | ||
| 91 | |||
| 51 | GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { | 92 | GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { |
| 52 | Pica::g_debug_context = Pica::DebugContext::Construct(); | 93 | Pica::g_debug_context = Pica::DebugContext::Construct(); |
| 53 | setAcceptDrops(true); | 94 | setAcceptDrops(true); |
| @@ -73,6 +114,9 @@ GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { | |||
| 73 | 114 | ||
| 74 | UpdateUITheme(); | 115 | UpdateUITheme(); |
| 75 | 116 | ||
| 117 | // Show one-time "callout" messages to the user | ||
| 118 | ShowCallouts(); | ||
| 119 | |||
| 76 | QStringList args = QApplication::arguments(); | 120 | QStringList args = QApplication::arguments(); |
| 77 | if (args.length() >= 2) { | 121 | if (args.length() >= 2) { |
| 78 | BootGame(args[1]); | 122 | BootGame(args[1]); |
| @@ -311,7 +355,7 @@ bool GMainWindow::LoadROM(const QString& filename) { | |||
| 311 | 355 | ||
| 312 | if (!gladLoadGL()) { | 356 | if (!gladLoadGL()) { |
| 313 | QMessageBox::critical(this, tr("Error while initializing OpenGL 3.3 Core!"), | 357 | QMessageBox::critical(this, tr("Error while initializing OpenGL 3.3 Core!"), |
| 314 | tr("Your GPU may not support OpenGL 3.3, or you do not" | 358 | tr("Your GPU may not support OpenGL 3.3, or you do not " |
| 315 | "have the latest graphics driver.")); | 359 | "have the latest graphics driver.")); |
| 316 | return false; | 360 | return false; |
| 317 | } | 361 | } |
| @@ -320,6 +364,8 @@ bool GMainWindow::LoadROM(const QString& filename) { | |||
| 320 | 364 | ||
| 321 | const Core::System::ResultStatus result{system.Load(render_window, filename.toStdString())}; | 365 | const Core::System::ResultStatus result{system.Load(render_window, filename.toStdString())}; |
| 322 | 366 | ||
| 367 | Core::Telemetry().AddField(Telemetry::FieldType::App, "Frontend", "Qt"); | ||
| 368 | |||
| 323 | if (result != Core::System::ResultStatus::Success) { | 369 | if (result != Core::System::ResultStatus::Success) { |
| 324 | switch (result) { | 370 | switch (result) { |
| 325 | case Core::System::ResultStatus::ErrorGetLoader: | 371 | case Core::System::ResultStatus::ErrorGetLoader: |
diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index 360de2ced..d59a6d67d 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h | |||
| @@ -80,6 +80,8 @@ private: | |||
| 80 | void BootGame(const QString& filename); | 80 | void BootGame(const QString& filename); |
| 81 | void ShutdownGame(); | 81 | void ShutdownGame(); |
| 82 | 82 | ||
| 83 | void ShowCallouts(); | ||
| 84 | |||
| 83 | /** | 85 | /** |
| 84 | * Stores the filename in the recently loaded files list. | 86 | * Stores the filename in the recently loaded files list. |
| 85 | * The new filename is stored at the beginning of the recently loaded files list. | 87 | * The new filename is stored at the beginning of the recently loaded files list. |
diff --git a/src/citra_qt/ui_settings.h b/src/citra_qt/ui_settings.h index 025c73f84..d85c92765 100644 --- a/src/citra_qt/ui_settings.h +++ b/src/citra_qt/ui_settings.h | |||
| @@ -48,6 +48,8 @@ struct Values { | |||
| 48 | 48 | ||
| 49 | // Shortcut name <Shortcut, context> | 49 | // Shortcut name <Shortcut, context> |
| 50 | std::vector<Shortcut> shortcuts; | 50 | std::vector<Shortcut> shortcuts; |
| 51 | |||
| 52 | uint32_t callout_flags; | ||
| 51 | }; | 53 | }; |
| 52 | 54 | ||
| 53 | extern Values values; | 55 | extern Values values; |
diff --git a/src/common/common_types.h b/src/common/common_types.h index e8f7ac6be..844d34965 100644 --- a/src/common/common_types.h +++ b/src/common/common_types.h | |||
| @@ -24,6 +24,7 @@ | |||
| 24 | 24 | ||
| 25 | #pragma once | 25 | #pragma once |
| 26 | 26 | ||
| 27 | #include <array> | ||
| 27 | #include <cstdint> | 28 | #include <cstdint> |
| 28 | 29 | ||
| 29 | #ifdef _MSC_VER | 30 | #ifdef _MSC_VER |
| @@ -50,6 +51,9 @@ typedef double f64; ///< 64-bit floating point | |||
| 50 | typedef u64 VAddr; ///< Represents a pointer in the userspace virtual address space. | 51 | typedef u64 VAddr; ///< Represents a pointer in the userspace virtual address space. |
| 51 | typedef u64 PAddr; ///< Represents a pointer in the ARM11 physical address space. | 52 | typedef u64 PAddr; ///< Represents a pointer in the ARM11 physical address space. |
| 52 | 53 | ||
| 54 | using u128 = std::array<std::uint64_t, 2>; | ||
| 55 | static_assert(sizeof(u128) == 16, "u128 must be 128 bits wide"); | ||
| 56 | |||
| 53 | // An inheritable class to disallow the copy constructor and operator= functions | 57 | // An inheritable class to disallow the copy constructor and operator= functions |
| 54 | class NonCopyable { | 58 | class NonCopyable { |
| 55 | protected: | 59 | protected: |
diff --git a/src/common/quaternion.h b/src/common/quaternion.h index 84ac82ed3..77f626bcb 100644 --- a/src/common/quaternion.h +++ b/src/common/quaternion.h | |||
| @@ -30,6 +30,11 @@ public: | |||
| 30 | return {xyz * other.w + other.xyz * w + Cross(xyz, other.xyz), | 30 | return {xyz * other.w + other.xyz * w + Cross(xyz, other.xyz), |
| 31 | w * other.w - Dot(xyz, other.xyz)}; | 31 | w * other.w - Dot(xyz, other.xyz)}; |
| 32 | } | 32 | } |
| 33 | |||
| 34 | Quaternion<T> Normalized() const { | ||
| 35 | T length = std::sqrt(xyz.Length2() + w * w); | ||
| 36 | return {xyz / length, w / length}; | ||
| 37 | } | ||
| 33 | }; | 38 | }; |
| 34 | 39 | ||
| 35 | template <typename T> | 40 | template <typename T> |
diff --git a/src/common/scm_rev.cpp.in b/src/common/scm_rev.cpp.in index 0080db5d5..4083095d5 100644 --- a/src/common/scm_rev.cpp.in +++ b/src/common/scm_rev.cpp.in | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #define GIT_BRANCH "@GIT_BRANCH@" | 8 | #define GIT_BRANCH "@GIT_BRANCH@" |
| 9 | #define GIT_DESC "@GIT_DESC@" | 9 | #define GIT_DESC "@GIT_DESC@" |
| 10 | #define BUILD_NAME "@REPO_NAME@" | 10 | #define BUILD_NAME "@REPO_NAME@" |
| 11 | #define BUILD_DATE "@BUILD_DATE@" | ||
| 11 | 12 | ||
| 12 | namespace Common { | 13 | namespace Common { |
| 13 | 14 | ||
| @@ -15,6 +16,7 @@ const char g_scm_rev[] = GIT_REV; | |||
| 15 | const char g_scm_branch[] = GIT_BRANCH; | 16 | const char g_scm_branch[] = GIT_BRANCH; |
| 16 | const char g_scm_desc[] = GIT_DESC; | 17 | const char g_scm_desc[] = GIT_DESC; |
| 17 | const char g_build_name[] = BUILD_NAME; | 18 | const char g_build_name[] = BUILD_NAME; |
| 19 | const char g_build_date[] = BUILD_DATE; | ||
| 18 | 20 | ||
| 19 | } // namespace | 21 | } // namespace |
| 20 | 22 | ||
diff --git a/src/common/scm_rev.h b/src/common/scm_rev.h index e22389803..18aaa1735 100644 --- a/src/common/scm_rev.h +++ b/src/common/scm_rev.h | |||
| @@ -10,5 +10,6 @@ extern const char g_scm_rev[]; | |||
| 10 | extern const char g_scm_branch[]; | 10 | extern const char g_scm_branch[]; |
| 11 | extern const char g_scm_desc[]; | 11 | extern const char g_scm_desc[]; |
| 12 | extern const char g_build_name[]; | 12 | extern const char g_build_name[]; |
| 13 | extern const char g_build_date[]; | ||
| 13 | 14 | ||
| 14 | } // namespace | 15 | } // namespace |
diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp index bad311793..6959915fa 100644 --- a/src/common/string_util.cpp +++ b/src/common/string_util.cpp | |||
| @@ -117,7 +117,7 @@ std::string StringFromFormat(const char* format, ...) { | |||
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | // For Debugging. Read out an u8 array. | 119 | // For Debugging. Read out an u8 array. |
| 120 | std::string ArrayToString(const u8* data, u32 size, int line_len, bool spaces) { | 120 | std::string ArrayToString(const u8* data, size_t size, int line_len, bool spaces) { |
| 121 | std::ostringstream oss; | 121 | std::ostringstream oss; |
| 122 | oss << std::setfill('0') << std::hex; | 122 | oss << std::setfill('0') << std::hex; |
| 123 | 123 | ||
diff --git a/src/common/string_util.h b/src/common/string_util.h index 075bf4ecb..259360aec 100644 --- a/src/common/string_util.h +++ b/src/common/string_util.h | |||
| @@ -33,7 +33,7 @@ inline void CharArrayFromFormat(char (&out)[Count], const char* format, ...) { | |||
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | // Good | 35 | // Good |
| 36 | std::string ArrayToString(const u8* data, u32 size, int line_len = 20, bool spaces = true); | 36 | std::string ArrayToString(const u8* data, size_t size, int line_len = 20, bool spaces = true); |
| 37 | 37 | ||
| 38 | std::string StripSpaces(const std::string& s); | 38 | std::string StripSpaces(const std::string& s); |
| 39 | std::string StripQuotes(const std::string& s); | 39 | std::string StripQuotes(const std::string& s); |
diff --git a/src/common/vector_math.h b/src/common/vector_math.h index c7a461a1e..3f0057d9e 100644 --- a/src/common/vector_math.h +++ b/src/common/vector_math.h | |||
| @@ -90,8 +90,9 @@ public: | |||
| 90 | x -= other.x; | 90 | x -= other.x; |
| 91 | y -= other.y; | 91 | y -= other.y; |
| 92 | } | 92 | } |
| 93 | template <typename Q = T, class = typename std::enable_if<std::is_signed<Q>::value>::type> | 93 | |
| 94 | Vec2<decltype(-T{})> operator-() const { | 94 | template <typename U = T> |
| 95 | Vec2<std::enable_if_t<std::is_signed<U>::value, U>> operator-() const { | ||
| 95 | return MakeVec(-x, -y); | 96 | return MakeVec(-x, -y); |
| 96 | } | 97 | } |
| 97 | Vec2<decltype(T{} * T{})> operator*(const Vec2& other) const { | 98 | Vec2<decltype(T{} * T{})> operator*(const Vec2& other) const { |
| @@ -103,8 +104,7 @@ public: | |||
| 103 | } | 104 | } |
| 104 | template <typename V> | 105 | template <typename V> |
| 105 | void operator*=(const V& f) { | 106 | void operator*=(const V& f) { |
| 106 | x *= f; | 107 | *this = *this * f; |
| 107 | y *= f; | ||
| 108 | } | 108 | } |
| 109 | template <typename V> | 109 | template <typename V> |
| 110 | Vec2<decltype(T{} / V{})> operator/(const V& f) const { | 110 | Vec2<decltype(T{} / V{})> operator/(const V& f) const { |
| @@ -247,8 +247,9 @@ public: | |||
| 247 | y -= other.y; | 247 | y -= other.y; |
| 248 | z -= other.z; | 248 | z -= other.z; |
| 249 | } | 249 | } |
| 250 | template <typename Q = T, class = typename std::enable_if<std::is_signed<Q>::value>::type> | 250 | |
| 251 | Vec3<decltype(-T{})> operator-() const { | 251 | template <typename U = T> |
| 252 | Vec3<std::enable_if_t<std::is_signed<U>::value, U>> operator-() const { | ||
| 252 | return MakeVec(-x, -y, -z); | 253 | return MakeVec(-x, -y, -z); |
| 253 | } | 254 | } |
| 254 | Vec3<decltype(T{} * T{})> operator*(const Vec3& other) const { | 255 | Vec3<decltype(T{} * T{})> operator*(const Vec3& other) const { |
| @@ -260,9 +261,7 @@ public: | |||
| 260 | } | 261 | } |
| 261 | template <typename V> | 262 | template <typename V> |
| 262 | void operator*=(const V& f) { | 263 | void operator*=(const V& f) { |
| 263 | x *= f; | 264 | *this = *this * f; |
| 264 | y *= f; | ||
| 265 | z *= f; | ||
| 266 | } | 265 | } |
| 267 | template <typename V> | 266 | template <typename V> |
| 268 | Vec3<decltype(T{} / V{})> operator/(const V& f) const { | 267 | Vec3<decltype(T{} / V{})> operator/(const V& f) const { |
| @@ -462,8 +461,9 @@ public: | |||
| 462 | z -= other.z; | 461 | z -= other.z; |
| 463 | w -= other.w; | 462 | w -= other.w; |
| 464 | } | 463 | } |
| 465 | template <typename Q = T, class = typename std::enable_if<std::is_signed<Q>::value>::type> | 464 | |
| 466 | Vec4<decltype(-T{})> operator-() const { | 465 | template <typename U = T> |
| 466 | Vec4<std::enable_if_t<std::is_signed<U>::value, U>> operator-() const { | ||
| 467 | return MakeVec(-x, -y, -z, -w); | 467 | return MakeVec(-x, -y, -z, -w); |
| 468 | } | 468 | } |
| 469 | Vec4<decltype(T{} * T{})> operator*(const Vec4& other) const { | 469 | Vec4<decltype(T{} * T{})> operator*(const Vec4& other) const { |
| @@ -475,10 +475,7 @@ public: | |||
| 475 | } | 475 | } |
| 476 | template <typename V> | 476 | template <typename V> |
| 477 | void operator*=(const V& f) { | 477 | void operator*=(const V& f) { |
| 478 | x *= f; | 478 | *this = *this * f; |
| 479 | y *= f; | ||
| 480 | z *= f; | ||
| 481 | w *= f; | ||
| 482 | } | 479 | } |
| 483 | template <typename V> | 480 | template <typename V> |
| 484 | Vec4<decltype(T{} / V{})> operator/(const V& f) const { | 481 | Vec4<decltype(T{} / V{})> operator/(const V& f) const { |
| @@ -721,4 +718,4 @@ static inline Vec4<T> MakeVec(const T& x, const Vec3<T>& yzw) { | |||
| 721 | return MakeVec(x, yzw[0], yzw[1], yzw[2]); | 718 | return MakeVec(x, yzw[0], yzw[1], yzw[2]); |
| 722 | } | 719 | } |
| 723 | 720 | ||
| 724 | } // namespace | 721 | } // namespace Math |
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 33ce8dc81..8b25eaf0a 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt | |||
| @@ -6,6 +6,8 @@ set(SRCS | |||
| 6 | arm/dyncom/arm_dyncom_interpreter.cpp | 6 | arm/dyncom/arm_dyncom_interpreter.cpp |
| 7 | arm/dyncom/arm_dyncom_thumb.cpp | 7 | arm/dyncom/arm_dyncom_thumb.cpp |
| 8 | arm/dyncom/arm_dyncom_trans.cpp | 8 | arm/dyncom/arm_dyncom_trans.cpp |
| 9 | arm/unicorn/arm_unicorn.cpp | ||
| 10 | arm/unicorn/unicorn_dynload.c | ||
| 9 | arm/skyeye_common/armstate.cpp | 11 | arm/skyeye_common/armstate.cpp |
| 10 | arm/skyeye_common/armsupp.cpp | 12 | arm/skyeye_common/armsupp.cpp |
| 11 | arm/skyeye_common/vfp/vfp.cpp | 13 | arm/skyeye_common/vfp/vfp.cpp |
| @@ -26,14 +28,15 @@ set(SRCS | |||
| 26 | file_sys/archive_systemsavedata.cpp | 28 | file_sys/archive_systemsavedata.cpp |
| 27 | file_sys/disk_archive.cpp | 29 | file_sys/disk_archive.cpp |
| 28 | file_sys/ivfc_archive.cpp | 30 | file_sys/ivfc_archive.cpp |
| 31 | file_sys/ncch_container.cpp | ||
| 29 | file_sys/path_parser.cpp | 32 | file_sys/path_parser.cpp |
| 30 | file_sys/savedata_archive.cpp | 33 | file_sys/savedata_archive.cpp |
| 34 | file_sys/title_metadata.cpp | ||
| 31 | frontend/camera/blank_camera.cpp | 35 | frontend/camera/blank_camera.cpp |
| 32 | frontend/camera/factory.cpp | 36 | frontend/camera/factory.cpp |
| 33 | frontend/camera/interface.cpp | 37 | frontend/camera/interface.cpp |
| 34 | frontend/emu_window.cpp | 38 | frontend/emu_window.cpp |
| 35 | frontend/framebuffer_layout.cpp | 39 | frontend/framebuffer_layout.cpp |
| 36 | frontend/motion_emu.cpp | ||
| 37 | gdbstub/gdbstub.cpp | 40 | gdbstub/gdbstub.cpp |
| 38 | hle/config_mem.cpp | 41 | hle/config_mem.cpp |
| 39 | hle/applets/applet.cpp | 42 | hle/applets/applet.cpp |
| @@ -60,6 +63,7 @@ set(SRCS | |||
| 60 | hle/kernel/timer.cpp | 63 | hle/kernel/timer.cpp |
| 61 | hle/kernel/vm_manager.cpp | 64 | hle/kernel/vm_manager.cpp |
| 62 | hle/kernel/wait_object.cpp | 65 | hle/kernel/wait_object.cpp |
| 66 | hle/lock.cpp | ||
| 63 | hle/romfs.cpp | 67 | hle/romfs.cpp |
| 64 | hle/service/ac/ac.cpp | 68 | hle/service/ac/ac.cpp |
| 65 | hle/service/ac/ac_i.cpp | 69 | hle/service/ac/ac_i.cpp |
| @@ -135,7 +139,8 @@ set(SRCS | |||
| 135 | hle/service/nim/nim_aoc.cpp | 139 | hle/service/nim/nim_aoc.cpp |
| 136 | hle/service/nim/nim_s.cpp | 140 | hle/service/nim/nim_s.cpp |
| 137 | hle/service/nim/nim_u.cpp | 141 | hle/service/nim/nim_u.cpp |
| 138 | hle/service/ns_s.cpp | 142 | hle/service/ns/ns.cpp |
| 143 | hle/service/ns/ns_s.cpp | ||
| 139 | hle/service/nwm/nwm.cpp | 144 | hle/service/nwm/nwm.cpp |
| 140 | hle/service/nwm/nwm_cec.cpp | 145 | hle/service/nwm/nwm_cec.cpp |
| 141 | hle/service/nwm/nwm_ext.cpp | 146 | hle/service/nwm/nwm_ext.cpp |
| @@ -145,6 +150,7 @@ set(SRCS | |||
| 145 | hle/service/nwm/nwm_tst.cpp | 150 | hle/service/nwm/nwm_tst.cpp |
| 146 | hle/service/nwm/nwm_uds.cpp | 151 | hle/service/nwm/nwm_uds.cpp |
| 147 | hle/service/nwm/uds_beacon.cpp | 152 | hle/service/nwm/uds_beacon.cpp |
| 153 | hle/service/nwm/uds_connection.cpp | ||
| 148 | hle/service/nwm/uds_data.cpp | 154 | hle/service/nwm/uds_data.cpp |
| 149 | hle/service/pm_app.cpp | 155 | hle/service/pm_app.cpp |
| 150 | hle/service/ptm/ptm.cpp | 156 | hle/service/ptm/ptm.cpp |
| @@ -198,6 +204,8 @@ set(HEADERS | |||
| 198 | arm/dyncom/arm_dyncom_run.h | 204 | arm/dyncom/arm_dyncom_run.h |
| 199 | arm/dyncom/arm_dyncom_thumb.h | 205 | arm/dyncom/arm_dyncom_thumb.h |
| 200 | arm/dyncom/arm_dyncom_trans.h | 206 | arm/dyncom/arm_dyncom_trans.h |
| 207 | arm/unicorn/arm_unicorn.h | ||
| 208 | arm/unicorn/unicorn_dynload.h | ||
| 201 | arm/skyeye_common/arm_regformat.h | 209 | arm/skyeye_common/arm_regformat.h |
| 202 | arm/skyeye_common/armstate.h | 210 | arm/skyeye_common/armstate.h |
| 203 | arm/skyeye_common/armsupp.h | 211 | arm/skyeye_common/armsupp.h |
| @@ -229,7 +237,6 @@ set(HEADERS | |||
| 229 | frontend/emu_window.h | 237 | frontend/emu_window.h |
| 230 | frontend/framebuffer_layout.h | 238 | frontend/framebuffer_layout.h |
| 231 | frontend/input.h | 239 | frontend/input.h |
| 232 | frontend/motion_emu.h | ||
| 233 | gdbstub/gdbstub.h | 240 | gdbstub/gdbstub.h |
| 234 | hle/config_mem.h | 241 | hle/config_mem.h |
| 235 | hle/function_wrappers.h | 242 | hle/function_wrappers.h |
| @@ -261,6 +268,7 @@ set(HEADERS | |||
| 261 | hle/kernel/timer.h | 268 | hle/kernel/timer.h |
| 262 | hle/kernel/vm_manager.h | 269 | hle/kernel/vm_manager.h |
| 263 | hle/kernel/wait_object.h | 270 | hle/kernel/wait_object.h |
| 271 | hle/lock.h | ||
| 264 | hle/result.h | 272 | hle/result.h |
| 265 | hle/romfs.h | 273 | hle/romfs.h |
| 266 | hle/service/ac/ac.h | 274 | hle/service/ac/ac.h |
| @@ -337,7 +345,8 @@ set(HEADERS | |||
| 337 | hle/service/nim/nim_aoc.h | 345 | hle/service/nim/nim_aoc.h |
| 338 | hle/service/nim/nim_s.h | 346 | hle/service/nim/nim_s.h |
| 339 | hle/service/nim/nim_u.h | 347 | hle/service/nim/nim_u.h |
| 340 | hle/service/ns_s.h | 348 | hle/service/ns/ns.h |
| 349 | hle/service/ns/ns_s.h | ||
| 341 | hle/service/nwm/nwm.h | 350 | hle/service/nwm/nwm.h |
| 342 | hle/service/nwm/nwm_cec.h | 351 | hle/service/nwm/nwm_cec.h |
| 343 | hle/service/nwm/nwm_ext.h | 352 | hle/service/nwm/nwm_ext.h |
| @@ -347,6 +356,7 @@ set(HEADERS | |||
| 347 | hle/service/nwm/nwm_tst.h | 356 | hle/service/nwm/nwm_tst.h |
| 348 | hle/service/nwm/nwm_uds.h | 357 | hle/service/nwm/nwm_uds.h |
| 349 | hle/service/nwm/uds_beacon.h | 358 | hle/service/nwm/uds_beacon.h |
| 359 | hle/service/nwm/uds_connection.h | ||
| 350 | hle/service/nwm/uds_data.h | 360 | hle/service/nwm/uds_data.h |
| 351 | hle/service/pm_app.h | 361 | hle/service/pm_app.h |
| 352 | hle/service/ptm/ptm.h | 362 | hle/service/ptm/ptm.h |
| @@ -394,7 +404,7 @@ set(HEADERS | |||
| 394 | 404 | ||
| 395 | create_directory_groups(${SRCS} ${HEADERS}) | 405 | create_directory_groups(${SRCS} ${HEADERS}) |
| 396 | add_library(core STATIC ${SRCS} ${HEADERS}) | 406 | add_library(core STATIC ${SRCS} ${HEADERS}) |
| 397 | target_link_libraries(core PUBLIC common PRIVATE audio_core video_core) | 407 | target_link_libraries(core PUBLIC common PRIVATE audio_core network video_core) |
| 398 | target_link_libraries(core PUBLIC Boost::boost PRIVATE cryptopp dynarmic fmt lz4_static) | 408 | target_link_libraries(core PUBLIC Boost::boost PRIVATE cryptopp dynarmic fmt lz4_static) |
| 399 | if (ENABLE_WEB_SERVICE) | 409 | if (ENABLE_WEB_SERVICE) |
| 400 | target_link_libraries(core PUBLIC json-headers web_service) | 410 | target_link_libraries(core PUBLIC json-headers web_service) |
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index f613556dd..0b3096347 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include "common/common_types.h" | 7 | #include "common/common_types.h" |
| 8 | #include "core/hle/kernel/vm_manager.h" | ||
| 8 | #include "core/arm/skyeye_common/arm_regformat.h" | 9 | #include "core/arm/skyeye_common/arm_regformat.h" |
| 9 | #include "core/arm/skyeye_common/vfp/asm_vfp.h" | 10 | #include "core/arm/skyeye_common/vfp/asm_vfp.h" |
| 10 | 11 | ||
| @@ -19,10 +20,11 @@ public: | |||
| 19 | u64 sp; | 20 | u64 sp; |
| 20 | u64 pc; | 21 | u64 pc; |
| 21 | u64 cpsr; | 22 | u64 cpsr; |
| 22 | u64 fpu_registers[64]; | 23 | u128 fpu_registers[32]; |
| 23 | u64 fpscr; | 24 | u64 fpscr; |
| 24 | u64 fpexc; | 25 | u64 fpexc; |
| 25 | 26 | ||
| 27 | |||
| 26 | // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT | 28 | // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT |
| 27 | VAddr tls_address; | 29 | VAddr tls_address; |
| 28 | }; | 30 | }; |
| @@ -41,9 +43,14 @@ public: | |||
| 41 | Run(1); | 43 | Run(1); |
| 42 | } | 44 | } |
| 43 | 45 | ||
| 46 | virtual void MapBackingMemory(VAddr address, size_t size, u8* memory, Kernel::VMAPermission perms) {} | ||
| 47 | |||
| 44 | /// Clear all instruction cache | 48 | /// Clear all instruction cache |
| 45 | virtual void ClearInstructionCache() = 0; | 49 | virtual void ClearInstructionCache() = 0; |
| 46 | 50 | ||
| 51 | /// Notify CPU emulation that page tables have changed | ||
| 52 | virtual void PageTableChanged() = 0; | ||
| 53 | |||
| 47 | /** | 54 | /** |
| 48 | * Set the Program Counter to an address | 55 | * Set the Program Counter to an address |
| 49 | * @param addr Address to set PC to | 56 | * @param addr Address to set PC to |
| @@ -70,6 +77,10 @@ public: | |||
| 70 | */ | 77 | */ |
| 71 | virtual void SetReg(int index, u64 value) = 0; | 78 | virtual void SetReg(int index, u64 value) = 0; |
| 72 | 79 | ||
| 80 | virtual const u128& GetExtReg(int index) const = 0; | ||
| 81 | |||
| 82 | virtual void SetExtReg(int index, u128& value) = 0; | ||
| 83 | |||
| 73 | /** | 84 | /** |
| 74 | * Gets the value of a VFP register | 85 | * Gets the value of a VFP register |
| 75 | * @param index Register index (0-31) | 86 | * @param index Register index (0-31) |
| @@ -129,12 +140,6 @@ public: | |||
| 129 | virtual void SetTlsAddress(VAddr address) = 0; | 140 | virtual void SetTlsAddress(VAddr address) = 0; |
| 130 | 141 | ||
| 131 | /** | 142 | /** |
| 132 | * Advance the CPU core by the specified number of ticks (e.g. to simulate CPU execution time) | ||
| 133 | * @param ticks Number of ticks to advance the CPU core | ||
| 134 | */ | ||
| 135 | virtual void AddTicks(u64 ticks) = 0; | ||
| 136 | |||
| 137 | /** | ||
| 138 | * Saves the current CPU context | 143 | * Saves the current CPU context |
| 139 | * @param ctx Thread context to save | 144 | * @param ctx Thread context to save |
| 140 | */ | 145 | */ |
| @@ -154,9 +159,6 @@ public: | |||
| 154 | return num_instructions; | 159 | return num_instructions; |
| 155 | } | 160 | } |
| 156 | 161 | ||
| 157 | s64 down_count = 0; ///< A decreasing counter of remaining cycles before the next event, | ||
| 158 | /// decreased by the cpu run loop | ||
| 159 | |||
| 160 | protected: | 162 | protected: |
| 161 | /** | 163 | /** |
| 162 | * Executes the given number of instructions | 164 | * Executes the given number of instructions |
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 0ea1d76e4..6dcab5bab 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp | |||
| @@ -16,24 +16,6 @@ | |||
| 16 | 16 | ||
| 17 | static void InterpreterFallback(u64 pc, Dynarmic::Jit* jit, void* user_arg) { | 17 | static void InterpreterFallback(u64 pc, Dynarmic::Jit* jit, void* user_arg) { |
| 18 | UNIMPLEMENTED_MSG("InterpreterFallback for ARM64 JIT does not exist!"); | 18 | UNIMPLEMENTED_MSG("InterpreterFallback for ARM64 JIT does not exist!"); |
| 19 | //ARMul_State* state = static_cast<ARMul_State*>(user_arg); | ||
| 20 | |||
| 21 | //state->Reg = jit->Regs(); | ||
| 22 | //state->Cpsr = jit->Cpsr(); | ||
| 23 | //state->Reg[15] = static_cast<u32>(pc); | ||
| 24 | //state->ExtReg = jit->ExtRegs(); | ||
| 25 | //state->VFP[VFP_FPSCR] = jit->Fpscr(); | ||
| 26 | //state->NumInstrsToExecute = 1; | ||
| 27 | |||
| 28 | //InterpreterMainLoop(state); | ||
| 29 | |||
| 30 | //bool is_thumb = (state->Cpsr & (1 << 5)) != 0; | ||
| 31 | //state->Reg[15] &= (is_thumb ? 0xFFFFFFFE : 0xFFFFFFFC); | ||
| 32 | |||
| 33 | //jit->Regs() = state->Reg; | ||
| 34 | //jit->Cpsr() = state->Cpsr; | ||
| 35 | //jit->ExtRegs() = state->ExtReg; | ||
| 36 | //jit->SetFpscr(state->VFP[VFP_FPSCR]); | ||
| 37 | } | 19 | } |
| 38 | 20 | ||
| 39 | static bool IsReadOnlyMemory(u64 vaddr) { | 21 | static bool IsReadOnlyMemory(u64 vaddr) { |
| @@ -73,11 +55,10 @@ void MemoryWrite64(const u64 addr, const u64 data) { | |||
| 73 | Memory::Write64(static_cast<VAddr>(addr), data); | 55 | Memory::Write64(static_cast<VAddr>(addr), data); |
| 74 | } | 56 | } |
| 75 | 57 | ||
| 76 | static Dynarmic::UserCallbacks GetUserCallbacks( | 58 | static Dynarmic::UserCallbacks GetUserCallbacks(ARM_Dynarmic* this_) { |
| 77 | const std::shared_ptr<ARMul_State>& interpeter_state) { | ||
| 78 | Dynarmic::UserCallbacks user_callbacks{}; | 59 | Dynarmic::UserCallbacks user_callbacks{}; |
| 79 | //user_callbacks.InterpreterFallback = &InterpreterFallback; | 60 | user_callbacks.InterpreterFallback = &InterpreterFallback; |
| 80 | //user_callbacks.user_arg = static_cast<void*>(interpeter_state.get()); | 61 | user_callbacks.user_arg = static_cast<void*>(this_); |
| 81 | user_callbacks.CallSVC = &SVC::CallSVC; | 62 | user_callbacks.CallSVC = &SVC::CallSVC; |
| 82 | user_callbacks.memory.IsReadOnlyMemory = &IsReadOnlyMemory; | 63 | user_callbacks.memory.IsReadOnlyMemory = &IsReadOnlyMemory; |
| 83 | user_callbacks.memory.ReadCode = &MemoryRead32; | 64 | user_callbacks.memory.ReadCode = &MemoryRead32; |
| @@ -90,13 +71,13 @@ static Dynarmic::UserCallbacks GetUserCallbacks( | |||
| 90 | user_callbacks.memory.Write32 = &MemoryWrite32; | 71 | user_callbacks.memory.Write32 = &MemoryWrite32; |
| 91 | user_callbacks.memory.Write64 = &MemoryWrite64; | 72 | user_callbacks.memory.Write64 = &MemoryWrite64; |
| 92 | //user_callbacks.page_table = Memory::GetCurrentPageTablePointers(); | 73 | //user_callbacks.page_table = Memory::GetCurrentPageTablePointers(); |
| 93 | user_callbacks.coprocessors[15] = std::make_shared<DynarmicCP15>(interpeter_state); | ||
| 94 | return user_callbacks; | 74 | return user_callbacks; |
| 95 | } | 75 | } |
| 96 | 76 | ||
| 97 | ARM_Dynarmic::ARM_Dynarmic(PrivilegeMode initial_mode) { | 77 | ARM_Dynarmic::ARM_Dynarmic(PrivilegeMode initial_mode) { |
| 98 | interpreter_state = std::make_shared<ARMul_State>(initial_mode); | 78 | } |
| 99 | jit = std::make_unique<Dynarmic::Jit>(GetUserCallbacks(interpreter_state), Dynarmic::Arch::ARM64); | 79 | |
| 80 | void ARM_Dynarmic::MapBackingMemory(VAddr address, size_t size, u8* memory, Kernel::VMAPermission perms) { | ||
| 100 | } | 81 | } |
| 101 | 82 | ||
| 102 | void ARM_Dynarmic::SetPC(u64 pc) { | 83 | void ARM_Dynarmic::SetPC(u64 pc) { |
| @@ -115,30 +96,26 @@ void ARM_Dynarmic::SetReg(int index, u64 value) { | |||
| 115 | jit->Regs64()[index] = value; | 96 | jit->Regs64()[index] = value; |
| 116 | } | 97 | } |
| 117 | 98 | ||
| 99 | const u128& ARM_Dynarmic::GetExtReg(int index) const { | ||
| 100 | return jit->ExtRegs64()[index]; | ||
| 101 | } | ||
| 102 | |||
| 103 | void ARM_Dynarmic::SetExtReg(int index, u128& value) { | ||
| 104 | jit->ExtRegs64()[index] = value; | ||
| 105 | } | ||
| 106 | |||
| 118 | u32 ARM_Dynarmic::GetVFPReg(int index) const { | 107 | u32 ARM_Dynarmic::GetVFPReg(int index) const { |
| 119 | return jit->ExtRegs()[index]; | 108 | return {}; |
| 120 | } | 109 | } |
| 121 | 110 | ||
| 122 | void ARM_Dynarmic::SetVFPReg(int index, u32 value) { | 111 | void ARM_Dynarmic::SetVFPReg(int index, u32 value) { |
| 123 | jit->ExtRegs()[index] = value; | ||
| 124 | } | 112 | } |
| 125 | 113 | ||
| 126 | u32 ARM_Dynarmic::GetVFPSystemReg(VFPSystemRegister reg) const { | 114 | u32 ARM_Dynarmic::GetVFPSystemReg(VFPSystemRegister reg) const { |
| 127 | if (reg == VFP_FPSCR) { | 115 | return {}; |
| 128 | return jit->Fpscr(); | ||
| 129 | } | ||
| 130 | |||
| 131 | // Dynarmic does not implement and/or expose other VFP registers, fallback to interpreter state | ||
| 132 | return interpreter_state->VFP[reg]; | ||
| 133 | } | 116 | } |
| 134 | 117 | ||
| 135 | void ARM_Dynarmic::SetVFPSystemReg(VFPSystemRegister reg, u32 value) { | 118 | void ARM_Dynarmic::SetVFPSystemReg(VFPSystemRegister reg, u32 value) { |
| 136 | if (reg == VFP_FPSCR) { | ||
| 137 | jit->SetFpscr(value); | ||
| 138 | } | ||
| 139 | |||
| 140 | // Dynarmic does not implement and/or expose other VFP registers, fallback to interpreter state | ||
| 141 | interpreter_state->VFP[reg] = value; | ||
| 142 | } | 119 | } |
| 143 | 120 | ||
| 144 | u32 ARM_Dynarmic::GetCPSR() const { | 121 | u32 ARM_Dynarmic::GetCPSR() const { |
| @@ -150,11 +127,10 @@ void ARM_Dynarmic::SetCPSR(u32 cpsr) { | |||
| 150 | } | 127 | } |
| 151 | 128 | ||
| 152 | u32 ARM_Dynarmic::GetCP15Register(CP15Register reg) { | 129 | u32 ARM_Dynarmic::GetCP15Register(CP15Register reg) { |
| 153 | return interpreter_state->CP15[reg]; | 130 | return {}; |
| 154 | } | 131 | } |
| 155 | 132 | ||
| 156 | void ARM_Dynarmic::SetCP15Register(CP15Register reg, u32 value) { | 133 | void ARM_Dynarmic::SetCP15Register(CP15Register reg, u32 value) { |
| 157 | interpreter_state->CP15[reg] = value; | ||
| 158 | } | 134 | } |
| 159 | 135 | ||
| 160 | VAddr ARM_Dynarmic::GetTlsAddress() const { | 136 | VAddr ARM_Dynarmic::GetTlsAddress() const { |
| @@ -165,51 +141,39 @@ void ARM_Dynarmic::SetTlsAddress(VAddr address) { | |||
| 165 | jit->TlsAddr() = address; | 141 | jit->TlsAddr() = address; |
| 166 | } | 142 | } |
| 167 | 143 | ||
| 168 | void ARM_Dynarmic::AddTicks(u64 ticks) { | ||
| 169 | down_count -= ticks; | ||
| 170 | if (down_count < 0) { | ||
| 171 | CoreTiming::Advance(); | ||
| 172 | } | ||
| 173 | } | ||
| 174 | |||
| 175 | MICROPROFILE_DEFINE(ARM_Jit, "ARM JIT", "ARM JIT", MP_RGB(255, 64, 64)); | 144 | MICROPROFILE_DEFINE(ARM_Jit, "ARM JIT", "ARM JIT", MP_RGB(255, 64, 64)); |
| 176 | 145 | ||
| 177 | void ARM_Dynarmic::ExecuteInstructions(int num_instructions) { | 146 | void ARM_Dynarmic::ExecuteInstructions(int num_instructions) { |
| 147 | ASSERT(Memory::GetCurrentPageTable() == current_page_table); | ||
| 178 | MICROPROFILE_SCOPE(ARM_Jit); | 148 | MICROPROFILE_SCOPE(ARM_Jit); |
| 179 | 149 | ||
| 180 | unsigned ticks_executed = jit->Run(1 /*static_cast<unsigned>(num_instructions)*/); | 150 | std::size_t ticks_executed = jit->Run(static_cast<unsigned>(num_instructions)); |
| 181 | 151 | ||
| 182 | AddTicks(ticks_executed); | 152 | CoreTiming::AddTicks(ticks_executed); |
| 183 | } | 153 | } |
| 184 | 154 | ||
| 185 | void ARM_Dynarmic::SaveContext(ARM_Interface::ThreadContext& ctx) { | 155 | void ARM_Dynarmic::SaveContext(ARM_Interface::ThreadContext& ctx) { |
| 186 | memcpy(ctx.cpu_registers, jit->Regs64().data(), sizeof(ctx.cpu_registers)); | 156 | memcpy(ctx.cpu_registers, jit->Regs64().data(), sizeof(ctx.cpu_registers)); |
| 187 | //memcpy(ctx.fpu_registers, jit->ExtRegs().data(), sizeof(ctx.fpu_registers)); | 157 | memcpy(ctx.fpu_registers, jit->ExtRegs64().data(), sizeof(ctx.fpu_registers)); |
| 188 | 158 | ||
| 189 | ctx.lr = jit->Regs64()[30]; | 159 | ctx.lr = jit->Regs64()[30]; |
| 190 | ctx.sp = jit->Regs64()[31]; | 160 | ctx.sp = jit->Regs64()[31]; |
| 191 | ctx.pc = jit->Regs64()[32]; | 161 | ctx.pc = jit->Regs64()[32]; |
| 192 | ctx.cpsr = jit->Cpsr(); | 162 | ctx.cpsr = jit->Cpsr(); |
| 193 | 163 | ||
| 194 | ctx.fpscr = jit->Fpscr(); | ||
| 195 | ctx.fpexc = interpreter_state->VFP[VFP_FPEXC]; | ||
| 196 | |||
| 197 | // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT | 164 | // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT |
| 198 | ctx.tls_address = jit->TlsAddr(); | 165 | ctx.tls_address = jit->TlsAddr(); |
| 199 | } | 166 | } |
| 200 | 167 | ||
| 201 | void ARM_Dynarmic::LoadContext(const ARM_Interface::ThreadContext& ctx) { | 168 | void ARM_Dynarmic::LoadContext(const ARM_Interface::ThreadContext& ctx) { |
| 202 | memcpy(jit->Regs64().data(), ctx.cpu_registers, sizeof(ctx.cpu_registers)); | 169 | memcpy(jit->Regs64().data(), ctx.cpu_registers, sizeof(ctx.cpu_registers)); |
| 203 | //memcpy(jit->ExtRegs().data(), ctx.fpu_registers, sizeof(ctx.fpu_registers)); | 170 | memcpy(jit->ExtRegs64().data(), ctx.fpu_registers, sizeof(ctx.fpu_registers)); |
| 204 | 171 | ||
| 205 | jit->Regs64()[30] = ctx.lr; | 172 | jit->Regs64()[30] = ctx.lr; |
| 206 | jit->Regs64()[31] = ctx.sp; | 173 | jit->Regs64()[31] = ctx.sp; |
| 207 | jit->Regs64()[32] = ctx.pc; | 174 | jit->Regs64()[32] = ctx.pc; |
| 208 | jit->Cpsr() = ctx.cpsr; | 175 | jit->Cpsr() = ctx.cpsr; |
| 209 | 176 | ||
| 210 | jit->SetFpscr(ctx.fpscr); | ||
| 211 | interpreter_state->VFP[VFP_FPEXC] = ctx.fpexc; | ||
| 212 | |||
| 213 | // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT | 177 | // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT |
| 214 | jit->TlsAddr() = ctx.tls_address; | 178 | jit->TlsAddr() = ctx.tls_address; |
| 215 | } | 179 | } |
| @@ -223,3 +187,16 @@ void ARM_Dynarmic::PrepareReschedule() { | |||
| 223 | void ARM_Dynarmic::ClearInstructionCache() { | 187 | void ARM_Dynarmic::ClearInstructionCache() { |
| 224 | jit->ClearCache(); | 188 | jit->ClearCache(); |
| 225 | } | 189 | } |
| 190 | |||
| 191 | void ARM_Dynarmic::PageTableChanged() { | ||
| 192 | current_page_table = Memory::GetCurrentPageTable(); | ||
| 193 | |||
| 194 | auto iter = jits.find(current_page_table); | ||
| 195 | if (iter != jits.end()) { | ||
| 196 | jit = iter->second.get(); | ||
| 197 | return; | ||
| 198 | } | ||
| 199 | |||
| 200 | jit = new Dynarmic::Jit(GetUserCallbacks(this), Dynarmic::Arch::ARM64); | ||
| 201 | jits.emplace(current_page_table, std::unique_ptr<Dynarmic::Jit>(jit)); | ||
| 202 | } | ||
diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h index fcdc1c0e0..6567359b0 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.h +++ b/src/core/arm/dynarmic/arm_dynarmic.h | |||
| @@ -4,20 +4,29 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <map> | ||
| 7 | #include <memory> | 8 | #include <memory> |
| 8 | #include <dynarmic/dynarmic.h> | 9 | #include <dynarmic/dynarmic.h> |
| 9 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 10 | #include "core/arm/arm_interface.h" | 11 | #include "core/arm/arm_interface.h" |
| 11 | #include "core/arm/skyeye_common/armstate.h" | 12 | #include "core/arm/skyeye_common/armstate.h" |
| 12 | 13 | ||
| 14 | namespace Memory { | ||
| 15 | struct PageTable; | ||
| 16 | } // namespace Memory | ||
| 17 | |||
| 13 | class ARM_Dynarmic final : public ARM_Interface { | 18 | class ARM_Dynarmic final : public ARM_Interface { |
| 14 | public: | 19 | public: |
| 15 | ARM_Dynarmic(PrivilegeMode initial_mode); | 20 | ARM_Dynarmic(PrivilegeMode initial_mode); |
| 16 | 21 | ||
| 22 | void MapBackingMemory(VAddr address, size_t size, u8* memory, Kernel::VMAPermission perms) override; | ||
| 23 | |||
| 17 | void SetPC(u64 pc) override; | 24 | void SetPC(u64 pc) override; |
| 18 | u64 GetPC() const override; | 25 | u64 GetPC() const override; |
| 19 | u64 GetReg(int index) const override; | 26 | u64 GetReg(int index) const override; |
| 20 | void SetReg(int index, u64 value) override; | 27 | void SetReg(int index, u64 value) override; |
| 28 | const u128& GetExtReg(int index) const override; | ||
| 29 | void SetExtReg(int index, u128& value) override; | ||
| 21 | u32 GetVFPReg(int index) const override; | 30 | u32 GetVFPReg(int index) const override; |
| 22 | void SetVFPReg(int index, u32 value) override; | 31 | void SetVFPReg(int index, u32 value) override; |
| 23 | u32 GetVFPSystemReg(VFPSystemRegister reg) const override; | 32 | u32 GetVFPSystemReg(VFPSystemRegister reg) const override; |
| @@ -29,8 +38,6 @@ public: | |||
| 29 | VAddr GetTlsAddress() const override; | 38 | VAddr GetTlsAddress() const override; |
| 30 | void SetTlsAddress(VAddr address) override; | 39 | void SetTlsAddress(VAddr address) override; |
| 31 | 40 | ||
| 32 | void AddTicks(u64 ticks) override; | ||
| 33 | |||
| 34 | void SaveContext(ThreadContext& ctx) override; | 41 | void SaveContext(ThreadContext& ctx) override; |
| 35 | void LoadContext(const ThreadContext& ctx) override; | 42 | void LoadContext(const ThreadContext& ctx) override; |
| 36 | 43 | ||
| @@ -38,8 +45,10 @@ public: | |||
| 38 | void ExecuteInstructions(int num_instructions) override; | 45 | void ExecuteInstructions(int num_instructions) override; |
| 39 | 46 | ||
| 40 | void ClearInstructionCache() override; | 47 | void ClearInstructionCache() override; |
| 48 | void PageTableChanged() override; | ||
| 41 | 49 | ||
| 42 | private: | 50 | private: |
| 43 | std::unique_ptr<Dynarmic::Jit> jit; | 51 | Dynarmic::Jit* jit = nullptr; |
| 44 | std::shared_ptr<ARMul_State> interpreter_state; | 52 | Memory::PageTable* current_page_table = nullptr; |
| 53 | std::map<Memory::PageTable*, std::unique_ptr<Dynarmic::Jit>> jits; | ||
| 45 | }; | 54 | }; |
diff --git a/src/core/arm/dyncom/arm_dyncom.cpp b/src/core/arm/dyncom/arm_dyncom.cpp index 99758fc2a..5ebf7a2f1 100644 --- a/src/core/arm/dyncom/arm_dyncom.cpp +++ b/src/core/arm/dyncom/arm_dyncom.cpp | |||
| @@ -29,6 +29,10 @@ void ARM_DynCom::SetPC(u64 pc) { | |||
| 29 | state->Reg[15] = pc; | 29 | state->Reg[15] = pc; |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | void ARM_DynCom::PageTableChanged() { | ||
| 33 | ClearInstructionCache(); | ||
| 34 | } | ||
| 35 | |||
| 32 | u64 ARM_DynCom::GetPC() const { | 36 | u64 ARM_DynCom::GetPC() const { |
| 33 | return state->Reg[15]; | 37 | return state->Reg[15]; |
| 34 | } | 38 | } |
| @@ -41,6 +45,13 @@ void ARM_DynCom::SetReg(int index, u64 value) { | |||
| 41 | state->Reg[index] = value; | 45 | state->Reg[index] = value; |
| 42 | } | 46 | } |
| 43 | 47 | ||
| 48 | const u128& ARM_DynCom::GetExtReg(int index) const { | ||
| 49 | return {}; | ||
| 50 | } | ||
| 51 | |||
| 52 | void ARM_DynCom::SetExtReg(int index, u128& value) { | ||
| 53 | } | ||
| 54 | |||
| 44 | u32 ARM_DynCom::GetVFPReg(int index) const { | 55 | u32 ARM_DynCom::GetVFPReg(int index) const { |
| 45 | return state->ExtReg[index]; | 56 | return state->ExtReg[index]; |
| 46 | } | 57 | } |
| @@ -80,12 +91,6 @@ VAddr ARM_DynCom::GetTlsAddress() const { | |||
| 80 | void ARM_DynCom::SetTlsAddress(VAddr /*address*/) { | 91 | void ARM_DynCom::SetTlsAddress(VAddr /*address*/) { |
| 81 | } | 92 | } |
| 82 | 93 | ||
| 83 | void ARM_DynCom::AddTicks(u64 ticks) { | ||
| 84 | down_count -= ticks; | ||
| 85 | if (down_count < 0) | ||
| 86 | CoreTiming::Advance(); | ||
| 87 | } | ||
| 88 | |||
| 89 | void ARM_DynCom::ExecuteInstructions(int num_instructions) { | 94 | void ARM_DynCom::ExecuteInstructions(int num_instructions) { |
| 90 | state->NumInstrsToExecute = num_instructions; | 95 | state->NumInstrsToExecute = num_instructions; |
| 91 | 96 | ||
| @@ -93,7 +98,7 @@ void ARM_DynCom::ExecuteInstructions(int num_instructions) { | |||
| 93 | // executing one instruction at a time. Otherwise, if a block is being executed, more | 98 | // executing one instruction at a time. Otherwise, if a block is being executed, more |
| 94 | // instructions may actually be executed than specified. | 99 | // instructions may actually be executed than specified. |
| 95 | unsigned ticks_executed = InterpreterMainLoop(state.get()); | 100 | unsigned ticks_executed = InterpreterMainLoop(state.get()); |
| 96 | AddTicks(ticks_executed); | 101 | CoreTiming::AddTicks(ticks_executed); |
| 97 | } | 102 | } |
| 98 | 103 | ||
| 99 | void ARM_DynCom::SaveContext(ThreadContext& ctx) { | 104 | void ARM_DynCom::SaveContext(ThreadContext& ctx) { |
diff --git a/src/core/arm/dyncom/arm_dyncom.h b/src/core/arm/dyncom/arm_dyncom.h index 44e674ae2..cc3c0f3da 100644 --- a/src/core/arm/dyncom/arm_dyncom.h +++ b/src/core/arm/dyncom/arm_dyncom.h | |||
| @@ -16,11 +16,14 @@ public: | |||
| 16 | ~ARM_DynCom(); | 16 | ~ARM_DynCom(); |
| 17 | 17 | ||
| 18 | void ClearInstructionCache() override; | 18 | void ClearInstructionCache() override; |
| 19 | void PageTableChanged() override; | ||
| 19 | 20 | ||
| 20 | void SetPC(u64 pc) override; | 21 | void SetPC(u64 pc) override; |
| 21 | u64 GetPC() const override; | 22 | u64 GetPC() const override; |
| 22 | u64 GetReg(int index) const override; | 23 | u64 GetReg(int index) const override; |
| 23 | void SetReg(int index, u64 value) override; | 24 | void SetReg(int index, u64 value) override; |
| 25 | const u128& GetExtReg(int index) const override; | ||
| 26 | void SetExtReg(int index, u128& value) override; | ||
| 24 | u32 GetVFPReg(int index) const override; | 27 | u32 GetVFPReg(int index) const override; |
| 25 | void SetVFPReg(int index, u32 value) override; | 28 | void SetVFPReg(int index, u32 value) override; |
| 26 | u32 GetVFPSystemReg(VFPSystemRegister reg) const override; | 29 | u32 GetVFPSystemReg(VFPSystemRegister reg) const override; |
| @@ -32,8 +35,6 @@ public: | |||
| 32 | VAddr GetTlsAddress() const override; | 35 | VAddr GetTlsAddress() const override; |
| 33 | void SetTlsAddress(VAddr address) override; | 36 | void SetTlsAddress(VAddr address) override; |
| 34 | 37 | ||
| 35 | void AddTicks(u64 ticks) override; | ||
| 36 | |||
| 37 | void SaveContext(ThreadContext& ctx) override; | 38 | void SaveContext(ThreadContext& ctx) override; |
| 38 | void LoadContext(const ThreadContext& ctx) override; | 39 | void LoadContext(const ThreadContext& ctx) override; |
| 39 | 40 | ||
diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp index f4fbb8d04..3522d1e82 100644 --- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp +++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp | |||
| @@ -759,7 +759,7 @@ static ThumbDecodeStatus DecodeThumbInstruction(u32 inst, u32 addr, u32* arm_ins | |||
| 759 | ThumbDecodeStatus ret = TranslateThumbInstruction(addr, inst, arm_inst, inst_size); | 759 | ThumbDecodeStatus ret = TranslateThumbInstruction(addr, inst, arm_inst, inst_size); |
| 760 | if (ret == ThumbDecodeStatus::BRANCH) { | 760 | if (ret == ThumbDecodeStatus::BRANCH) { |
| 761 | int inst_index; | 761 | int inst_index; |
| 762 | int table_length = arm_instruction_trans_len; | 762 | int table_length = static_cast<int>(arm_instruction_trans_len); |
| 763 | u32 tinstr = GetThumbInstruction(inst, addr); | 763 | u32 tinstr = GetThumbInstruction(inst, addr); |
| 764 | 764 | ||
| 765 | switch ((tinstr & 0xF800) >> 11) { | 765 | switch ((tinstr & 0xF800) >> 11) { |
| @@ -838,7 +838,7 @@ static unsigned int InterpreterTranslateInstruction(const ARMul_State* cpu, cons | |||
| 838 | return inst_size; | 838 | return inst_size; |
| 839 | } | 839 | } |
| 840 | 840 | ||
| 841 | static int InterpreterTranslateBlock(ARMul_State* cpu, int& bb_start, u32 addr) { | 841 | static int InterpreterTranslateBlock(ARMul_State* cpu, std::size_t& bb_start, u32 addr) { |
| 842 | MICROPROFILE_SCOPE(DynCom_Decode); | 842 | MICROPROFILE_SCOPE(DynCom_Decode); |
| 843 | 843 | ||
| 844 | // Decode instruction, get index | 844 | // Decode instruction, get index |
| @@ -871,7 +871,7 @@ static int InterpreterTranslateBlock(ARMul_State* cpu, int& bb_start, u32 addr) | |||
| 871 | return KEEP_GOING; | 871 | return KEEP_GOING; |
| 872 | } | 872 | } |
| 873 | 873 | ||
| 874 | static int InterpreterTranslateSingle(ARMul_State* cpu, int& bb_start, u32 addr) { | 874 | static int InterpreterTranslateSingle(ARMul_State* cpu, std::size_t& bb_start, u32 addr) { |
| 875 | MICROPROFILE_SCOPE(DynCom_Decode); | 875 | MICROPROFILE_SCOPE(DynCom_Decode); |
| 876 | 876 | ||
| 877 | ARM_INST_PTR inst_base = nullptr; | 877 | ARM_INST_PTR inst_base = nullptr; |
| @@ -1620,7 +1620,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { | |||
| 1620 | unsigned int addr; | 1620 | unsigned int addr; |
| 1621 | unsigned int num_instrs = 0; | 1621 | unsigned int num_instrs = 0; |
| 1622 | 1622 | ||
| 1623 | int ptr; | 1623 | std::size_t ptr; |
| 1624 | 1624 | ||
| 1625 | LOAD_NZCVT; | 1625 | LOAD_NZCVT; |
| 1626 | DISPATCH : { | 1626 | DISPATCH : { |
diff --git a/src/core/arm/skyeye_common/armstate.h b/src/core/arm/skyeye_common/armstate.h index 1a707ff7e..893877797 100644 --- a/src/core/arm/skyeye_common/armstate.h +++ b/src/core/arm/skyeye_common/armstate.h | |||
| @@ -230,7 +230,7 @@ public: | |||
| 230 | 230 | ||
| 231 | // TODO(bunnei): Move this cache to a better place - it should be per codeset (likely per | 231 | // TODO(bunnei): Move this cache to a better place - it should be per codeset (likely per |
| 232 | // process for our purposes), not per ARMul_State (which tracks CPU core state). | 232 | // process for our purposes), not per ARMul_State (which tracks CPU core state). |
| 233 | std::unordered_map<u32, int> instruction_cache; | 233 | std::unordered_map<u32, std::size_t> instruction_cache; |
| 234 | 234 | ||
| 235 | private: | 235 | private: |
| 236 | void ResetMPCoreCP15Registers(); | 236 | void ResetMPCoreCP15Registers(); |
diff --git a/src/core/core.cpp b/src/core/core.cpp index d08f18623..c5448630f 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -9,16 +9,19 @@ | |||
| 9 | #include "core/arm/arm_interface.h" | 9 | #include "core/arm/arm_interface.h" |
| 10 | #include "core/arm/dynarmic/arm_dynarmic.h" | 10 | #include "core/arm/dynarmic/arm_dynarmic.h" |
| 11 | #include "core/arm/dyncom/arm_dyncom.h" | 11 | #include "core/arm/dyncom/arm_dyncom.h" |
| 12 | #include "core/arm/unicorn/arm_unicorn.h" | ||
| 12 | #include "core/core.h" | 13 | #include "core/core.h" |
| 13 | #include "core/core_timing.h" | 14 | #include "core/core_timing.h" |
| 14 | #include "core/gdbstub/gdbstub.h" | 15 | #include "core/gdbstub/gdbstub.h" |
| 15 | #include "core/hle/kernel/kernel.h" | 16 | #include "core/hle/kernel/kernel.h" |
| 17 | #include "core/hle/kernel/process.h" | ||
| 16 | #include "core/hle/kernel/thread.h" | 18 | #include "core/hle/kernel/thread.h" |
| 17 | #include "core/hle/service/service.h" | 19 | #include "core/hle/service/service.h" |
| 18 | #include "core/hw/hw.h" | 20 | #include "core/hw/hw.h" |
| 19 | #include "core/loader/loader.h" | 21 | #include "core/loader/loader.h" |
| 20 | #include "core/memory_setup.h" | 22 | #include "core/memory_setup.h" |
| 21 | #include "core/settings.h" | 23 | #include "core/settings.h" |
| 24 | #include "network/network.h" | ||
| 22 | #include "video_core/video_core.h" | 25 | #include "video_core/video_core.h" |
| 23 | 26 | ||
| 24 | namespace Core { | 27 | namespace Core { |
| @@ -99,7 +102,7 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file | |||
| 99 | return init_result; | 102 | return init_result; |
| 100 | } | 103 | } |
| 101 | 104 | ||
| 102 | const Loader::ResultStatus load_result{app_loader->Load()}; | 105 | const Loader::ResultStatus load_result{app_loader->Load(Kernel::g_current_process)}; |
| 103 | if (Loader::ResultStatus::Success != load_result) { | 106 | if (Loader::ResultStatus::Success != load_result) { |
| 104 | LOG_CRITICAL(Core, "Failed to load ROM (Error %i)!", load_result); | 107 | LOG_CRITICAL(Core, "Failed to load ROM (Error %i)!", load_result); |
| 105 | System::Shutdown(); | 108 | System::Shutdown(); |
| @@ -136,7 +139,6 @@ void System::Reschedule() { | |||
| 136 | } | 139 | } |
| 137 | 140 | ||
| 138 | System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { | 141 | System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { |
| 139 | Memory::InitMemoryMap(); | ||
| 140 | LOG_DEBUG(HW_Memory, "initialized OK"); | 142 | LOG_DEBUG(HW_Memory, "initialized OK"); |
| 141 | 143 | ||
| 142 | if (Settings::values.use_cpu_jit) { | 144 | if (Settings::values.use_cpu_jit) { |
| @@ -188,8 +190,12 @@ void System::Shutdown() { | |||
| 188 | cpu_core = nullptr; | 190 | cpu_core = nullptr; |
| 189 | app_loader = nullptr; | 191 | app_loader = nullptr; |
| 190 | telemetry_session = nullptr; | 192 | telemetry_session = nullptr; |
| 193 | if (auto room_member = Network::GetRoomMember().lock()) { | ||
| 194 | Network::GameInfo game_info{}; | ||
| 195 | room_member->SendGameInfo(game_info); | ||
| 196 | } | ||
| 191 | 197 | ||
| 192 | LOG_DEBUG(Core, "Shutdown OK"); | 198 | LOG_DEBUG(Core, "Shutdown OK"); |
| 193 | } | 199 | } |
| 194 | 200 | ||
| 195 | } // namespace | 201 | } // namespace Core |
diff --git a/src/core/core.h b/src/core/core.h index 4e3b6b409..9805cc694 100644 --- a/src/core/core.h +++ b/src/core/core.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <memory> | 7 | #include <memory> |
| 8 | #include <string> | 8 | #include <string> |
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "core/loader/loader.h" | ||
| 10 | #include "core/memory.h" | 11 | #include "core/memory.h" |
| 11 | #include "core/perf_stats.h" | 12 | #include "core/perf_stats.h" |
| 12 | #include "core/telemetry_session.h" | 13 | #include "core/telemetry_session.h" |
| @@ -14,10 +15,6 @@ | |||
| 14 | class EmuWindow; | 15 | class EmuWindow; |
| 15 | class ARM_Interface; | 16 | class ARM_Interface; |
| 16 | 17 | ||
| 17 | namespace Loader { | ||
| 18 | class AppLoader; | ||
| 19 | } | ||
| 20 | |||
| 21 | namespace Core { | 18 | namespace Core { |
| 22 | 19 | ||
| 23 | class System { | 20 | class System { |
| @@ -119,6 +116,10 @@ public: | |||
| 119 | return status_details; | 116 | return status_details; |
| 120 | } | 117 | } |
| 121 | 118 | ||
| 119 | Loader::AppLoader& GetAppLoader() const { | ||
| 120 | return *app_loader; | ||
| 121 | } | ||
| 122 | |||
| 122 | private: | 123 | private: |
| 123 | /** | 124 | /** |
| 124 | * Initialize the emulated system. | 125 | * Initialize the emulated system. |
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index 276ecfdf6..5e2a5d00f 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp | |||
| @@ -57,6 +57,9 @@ static s64 idled_cycles; | |||
| 57 | static s64 last_global_time_ticks; | 57 | static s64 last_global_time_ticks; |
| 58 | static s64 last_global_time_us; | 58 | static s64 last_global_time_us; |
| 59 | 59 | ||
| 60 | static s64 down_count = 0; ///< A decreasing counter of remaining cycles before the next event, | ||
| 61 | /// decreased by the cpu run loop | ||
| 62 | |||
| 60 | static std::recursive_mutex external_event_section; | 63 | static std::recursive_mutex external_event_section; |
| 61 | 64 | ||
| 62 | // Warning: not included in save state. | 65 | // Warning: not included in save state. |
| @@ -146,7 +149,7 @@ void UnregisterAllEvents() { | |||
| 146 | } | 149 | } |
| 147 | 150 | ||
| 148 | void Init() { | 151 | void Init() { |
| 149 | Core::CPU().down_count = INITIAL_SLICE_LENGTH; | 152 | down_count = INITIAL_SLICE_LENGTH; |
| 150 | g_slice_length = INITIAL_SLICE_LENGTH; | 153 | g_slice_length = INITIAL_SLICE_LENGTH; |
| 151 | global_timer = 0; | 154 | global_timer = 0; |
| 152 | idled_cycles = 0; | 155 | idled_cycles = 0; |
| @@ -185,8 +188,15 @@ void Shutdown() { | |||
| 185 | } | 188 | } |
| 186 | } | 189 | } |
| 187 | 190 | ||
| 191 | void AddTicks(u64 ticks) { | ||
| 192 | down_count -= ticks; | ||
| 193 | if (down_count < 0) { | ||
| 194 | Advance(); | ||
| 195 | } | ||
| 196 | } | ||
| 197 | |||
| 188 | u64 GetTicks() { | 198 | u64 GetTicks() { |
| 189 | return (u64)global_timer + g_slice_length - Core::CPU().down_count; | 199 | return (u64)global_timer + g_slice_length - down_count; |
| 190 | } | 200 | } |
| 191 | 201 | ||
| 192 | u64 GetIdleTicks() { | 202 | u64 GetIdleTicks() { |
| @@ -460,18 +470,18 @@ void MoveEvents() { | |||
| 460 | } | 470 | } |
| 461 | 471 | ||
| 462 | void ForceCheck() { | 472 | void ForceCheck() { |
| 463 | s64 cycles_executed = g_slice_length - Core::CPU().down_count; | 473 | s64 cycles_executed = g_slice_length - down_count; |
| 464 | global_timer += cycles_executed; | 474 | global_timer += cycles_executed; |
| 465 | // This will cause us to check for new events immediately. | 475 | // This will cause us to check for new events immediately. |
| 466 | Core::CPU().down_count = 0; | 476 | down_count = 0; |
| 467 | // But let's not eat a bunch more time in Advance() because of this. | 477 | // But let's not eat a bunch more time in Advance() because of this. |
| 468 | g_slice_length = 0; | 478 | g_slice_length = 0; |
| 469 | } | 479 | } |
| 470 | 480 | ||
| 471 | void Advance() { | 481 | void Advance() { |
| 472 | s64 cycles_executed = g_slice_length - Core::CPU().down_count; | 482 | s64 cycles_executed = g_slice_length - down_count; |
| 473 | global_timer += cycles_executed; | 483 | global_timer += cycles_executed; |
| 474 | Core::CPU().down_count = g_slice_length; | 484 | down_count = g_slice_length; |
| 475 | 485 | ||
| 476 | if (has_ts_events) | 486 | if (has_ts_events) |
| 477 | MoveEvents(); | 487 | MoveEvents(); |
| @@ -480,7 +490,7 @@ void Advance() { | |||
| 480 | if (!first) { | 490 | if (!first) { |
| 481 | if (g_slice_length < 10000) { | 491 | if (g_slice_length < 10000) { |
| 482 | g_slice_length += 10000; | 492 | g_slice_length += 10000; |
| 483 | Core::CPU().down_count += g_slice_length; | 493 | down_count += g_slice_length; |
| 484 | } | 494 | } |
| 485 | } else { | 495 | } else { |
| 486 | // Note that events can eat cycles as well. | 496 | // Note that events can eat cycles as well. |
| @@ -490,7 +500,7 @@ void Advance() { | |||
| 490 | 500 | ||
| 491 | const int diff = target - g_slice_length; | 501 | const int diff = target - g_slice_length; |
| 492 | g_slice_length += diff; | 502 | g_slice_length += diff; |
| 493 | Core::CPU().down_count += diff; | 503 | down_count += diff; |
| 494 | } | 504 | } |
| 495 | if (advance_callback) | 505 | if (advance_callback) |
| 496 | advance_callback(static_cast<int>(cycles_executed)); | 506 | advance_callback(static_cast<int>(cycles_executed)); |
| @@ -506,12 +516,12 @@ void LogPendingEvents() { | |||
| 506 | } | 516 | } |
| 507 | 517 | ||
| 508 | void Idle(int max_idle) { | 518 | void Idle(int max_idle) { |
| 509 | s64 cycles_down = Core::CPU().down_count; | 519 | s64 cycles_down = down_count; |
| 510 | if (max_idle != 0 && cycles_down > max_idle) | 520 | if (max_idle != 0 && cycles_down > max_idle) |
| 511 | cycles_down = max_idle; | 521 | cycles_down = max_idle; |
| 512 | 522 | ||
| 513 | if (first && cycles_down > 0) { | 523 | if (first && cycles_down > 0) { |
| 514 | s64 cycles_executed = g_slice_length - Core::CPU().down_count; | 524 | s64 cycles_executed = g_slice_length - down_count; |
| 515 | s64 cycles_next_event = first->time - global_timer; | 525 | s64 cycles_next_event = first->time - global_timer; |
| 516 | 526 | ||
| 517 | if (cycles_next_event < cycles_executed + cycles_down) { | 527 | if (cycles_next_event < cycles_executed + cycles_down) { |
| @@ -526,9 +536,9 @@ void Idle(int max_idle) { | |||
| 526 | cycles_down / (float)(g_clock_rate_arm11 * 0.001f)); | 536 | cycles_down / (float)(g_clock_rate_arm11 * 0.001f)); |
| 527 | 537 | ||
| 528 | idled_cycles += cycles_down; | 538 | idled_cycles += cycles_down; |
| 529 | Core::CPU().down_count -= cycles_down; | 539 | down_count -= cycles_down; |
| 530 | if (Core::CPU().down_count == 0) | 540 | if (down_count == 0) |
| 531 | Core::CPU().down_count = -1; | 541 | down_count = -1; |
| 532 | } | 542 | } |
| 533 | 543 | ||
| 534 | std::string GetScheduledEventsSummary() { | 544 | std::string GetScheduledEventsSummary() { |
diff --git a/src/core/core_timing.h b/src/core/core_timing.h index d2f85cd4d..897350801 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h | |||
| @@ -67,6 +67,12 @@ void Shutdown(); | |||
| 67 | typedef void (*MHzChangeCallback)(); | 67 | typedef void (*MHzChangeCallback)(); |
| 68 | typedef std::function<void(u64 userdata, int cycles_late)> TimedCallback; | 68 | typedef std::function<void(u64 userdata, int cycles_late)> TimedCallback; |
| 69 | 69 | ||
| 70 | /** | ||
| 71 | * Advance the CPU core by the specified number of ticks (e.g. to simulate CPU execution time) | ||
| 72 | * @param ticks Number of ticks to advance the CPU core | ||
| 73 | */ | ||
| 74 | void AddTicks(u64 ticks); | ||
| 75 | |||
| 70 | u64 GetTicks(); | 76 | u64 GetTicks(); |
| 71 | u64 GetIdleTicks(); | 77 | u64 GetIdleTicks(); |
| 72 | u64 GetGlobalTimeUs(); | 78 | u64 GetGlobalTimeUs(); |
diff --git a/src/core/file_sys/archive_backend.cpp b/src/core/file_sys/archive_backend.cpp index 1fae0ede0..87a240d7a 100644 --- a/src/core/file_sys/archive_backend.cpp +++ b/src/core/file_sys/archive_backend.cpp | |||
| @@ -90,6 +90,8 @@ std::u16string Path::AsU16Str() const { | |||
| 90 | LOG_ERROR(Service_FS, "LowPathType cannot be converted to u16string!"); | 90 | LOG_ERROR(Service_FS, "LowPathType cannot be converted to u16string!"); |
| 91 | return {}; | 91 | return {}; |
| 92 | } | 92 | } |
| 93 | |||
| 94 | UNREACHABLE(); | ||
| 93 | } | 95 | } |
| 94 | 96 | ||
| 95 | std::vector<u8> Path::AsBinary() const { | 97 | std::vector<u8> Path::AsBinary() const { |
diff --git a/src/core/file_sys/archive_ncch.cpp b/src/core/file_sys/archive_ncch.cpp index 6d9007731..e8c5be983 100644 --- a/src/core/file_sys/archive_ncch.cpp +++ b/src/core/file_sys/archive_ncch.cpp | |||
| @@ -13,7 +13,10 @@ | |||
| 13 | #include "core/file_sys/archive_ncch.h" | 13 | #include "core/file_sys/archive_ncch.h" |
| 14 | #include "core/file_sys/errors.h" | 14 | #include "core/file_sys/errors.h" |
| 15 | #include "core/file_sys/ivfc_archive.h" | 15 | #include "core/file_sys/ivfc_archive.h" |
| 16 | #include "core/file_sys/ncch_container.h" | ||
| 17 | #include "core/file_sys/title_metadata.h" | ||
| 16 | #include "core/hle/service/fs/archive.h" | 18 | #include "core/hle/service/fs/archive.h" |
| 19 | #include "core/loader/loader.h" | ||
| 17 | 20 | ||
| 18 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 21 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 19 | // FileSys namespace | 22 | // FileSys namespace |
| @@ -25,8 +28,18 @@ static std::string GetNCCHContainerPath(const std::string& nand_directory) { | |||
| 25 | } | 28 | } |
| 26 | 29 | ||
| 27 | static std::string GetNCCHPath(const std::string& mount_point, u32 high, u32 low) { | 30 | static std::string GetNCCHPath(const std::string& mount_point, u32 high, u32 low) { |
| 28 | return Common::StringFromFormat("%s%08x/%08x/content/00000000.app.romfs", mount_point.c_str(), | 31 | u32 content_id = 0; |
| 29 | high, low); | 32 | |
| 33 | // TODO(shinyquagsire23): Title database should be doing this path lookup | ||
| 34 | std::string content_path = | ||
| 35 | Common::StringFromFormat("%s%08x/%08x/content/", mount_point.c_str(), high, low); | ||
| 36 | std::string tmd_path = content_path + "00000000.tmd"; | ||
| 37 | TitleMetadata tmd(tmd_path); | ||
| 38 | if (tmd.Load() == Loader::ResultStatus::Success) { | ||
| 39 | content_id = tmd.GetBootContentID(); | ||
| 40 | } | ||
| 41 | |||
| 42 | return Common::StringFromFormat("%s%08x.app", content_path.c_str(), content_id); | ||
| 30 | } | 43 | } |
| 31 | 44 | ||
| 32 | ArchiveFactory_NCCH::ArchiveFactory_NCCH(const std::string& nand_directory) | 45 | ArchiveFactory_NCCH::ArchiveFactory_NCCH(const std::string& nand_directory) |
| @@ -38,9 +51,14 @@ ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_NCCH::Open(const Path& | |||
| 38 | u32 high = data[1]; | 51 | u32 high = data[1]; |
| 39 | u32 low = data[0]; | 52 | u32 low = data[0]; |
| 40 | std::string file_path = GetNCCHPath(mount_point, high, low); | 53 | std::string file_path = GetNCCHPath(mount_point, high, low); |
| 41 | auto file = std::make_shared<FileUtil::IOFile>(file_path, "rb"); | ||
| 42 | 54 | ||
| 43 | if (!file->IsOpen()) { | 55 | std::shared_ptr<FileUtil::IOFile> romfs_file; |
| 56 | u64 romfs_offset = 0; | ||
| 57 | u64 romfs_size = 0; | ||
| 58 | auto ncch_container = NCCHContainer(file_path); | ||
| 59 | |||
| 60 | if (ncch_container.ReadRomFS(romfs_file, romfs_offset, romfs_size) != | ||
| 61 | Loader::ResultStatus::Success) { | ||
| 44 | // High Title ID of the archive: The category (https://3dbrew.org/wiki/Title_list). | 62 | // High Title ID of the archive: The category (https://3dbrew.org/wiki/Title_list). |
| 45 | constexpr u32 shared_data_archive = 0x0004009B; | 63 | constexpr u32 shared_data_archive = 0x0004009B; |
| 46 | constexpr u32 system_data_archive = 0x000400DB; | 64 | constexpr u32 system_data_archive = 0x000400DB; |
| @@ -74,9 +92,8 @@ ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_NCCH::Open(const Path& | |||
| 74 | } | 92 | } |
| 75 | return ERROR_NOT_FOUND; | 93 | return ERROR_NOT_FOUND; |
| 76 | } | 94 | } |
| 77 | auto size = file->GetSize(); | ||
| 78 | 95 | ||
| 79 | auto archive = std::make_unique<IVFCArchive>(file, 0, size); | 96 | auto archive = std::make_unique<IVFCArchive>(romfs_file, romfs_offset, romfs_size); |
| 80 | return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive)); | 97 | return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive)); |
| 81 | } | 98 | } |
| 82 | 99 | ||
diff --git a/src/core/file_sys/archive_sdmc.cpp b/src/core/file_sys/archive_sdmc.cpp index 679909d06..fe3dce5d4 100644 --- a/src/core/file_sys/archive_sdmc.cpp +++ b/src/core/file_sys/archive_sdmc.cpp | |||
| @@ -121,7 +121,25 @@ ResultCode SDMCArchive::DeleteFile(const Path& path) const { | |||
| 121 | } | 121 | } |
| 122 | 122 | ||
| 123 | ResultCode SDMCArchive::RenameFile(const Path& src_path, const Path& dest_path) const { | 123 | ResultCode SDMCArchive::RenameFile(const Path& src_path, const Path& dest_path) const { |
| 124 | if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) { | 124 | const PathParser path_parser_src(src_path); |
| 125 | |||
| 126 | // TODO: Verify these return codes with HW | ||
| 127 | if (!path_parser_src.IsValid()) { | ||
| 128 | LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str()); | ||
| 129 | return ERROR_INVALID_PATH; | ||
| 130 | } | ||
| 131 | |||
| 132 | const PathParser path_parser_dest(dest_path); | ||
| 133 | |||
| 134 | if (!path_parser_dest.IsValid()) { | ||
| 135 | LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str()); | ||
| 136 | return ERROR_INVALID_PATH; | ||
| 137 | } | ||
| 138 | |||
| 139 | const auto src_path_full = path_parser_src.BuildHostPath(mount_point); | ||
| 140 | const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point); | ||
| 141 | |||
| 142 | if (FileUtil::Rename(src_path_full, dest_path_full)) { | ||
| 125 | return RESULT_SUCCESS; | 143 | return RESULT_SUCCESS; |
| 126 | } | 144 | } |
| 127 | 145 | ||
| @@ -260,8 +278,27 @@ ResultCode SDMCArchive::CreateDirectory(const Path& path) const { | |||
| 260 | } | 278 | } |
| 261 | 279 | ||
| 262 | ResultCode SDMCArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const { | 280 | ResultCode SDMCArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const { |
| 263 | if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) | 281 | const PathParser path_parser_src(src_path); |
| 282 | |||
| 283 | // TODO: Verify these return codes with HW | ||
| 284 | if (!path_parser_src.IsValid()) { | ||
| 285 | LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str()); | ||
| 286 | return ERROR_INVALID_PATH; | ||
| 287 | } | ||
| 288 | |||
| 289 | const PathParser path_parser_dest(dest_path); | ||
| 290 | |||
| 291 | if (!path_parser_dest.IsValid()) { | ||
| 292 | LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str()); | ||
| 293 | return ERROR_INVALID_PATH; | ||
| 294 | } | ||
| 295 | |||
| 296 | const auto src_path_full = path_parser_src.BuildHostPath(mount_point); | ||
| 297 | const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point); | ||
| 298 | |||
| 299 | if (FileUtil::Rename(src_path_full, dest_path_full)) { | ||
| 264 | return RESULT_SUCCESS; | 300 | return RESULT_SUCCESS; |
| 301 | } | ||
| 265 | 302 | ||
| 266 | // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't | 303 | // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't |
| 267 | // exist or similar. Verify. | 304 | // exist or similar. Verify. |
diff --git a/src/core/file_sys/archive_selfncch.cpp b/src/core/file_sys/archive_selfncch.cpp index 298a37a44..3222000cf 100644 --- a/src/core/file_sys/archive_selfncch.cpp +++ b/src/core/file_sys/archive_selfncch.cpp | |||
| @@ -3,12 +3,14 @@ | |||
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <array> | 5 | #include <array> |
| 6 | #include <cinttypes> | ||
| 6 | #include "common/common_types.h" | 7 | #include "common/common_types.h" |
| 7 | #include "common/logging/log.h" | 8 | #include "common/logging/log.h" |
| 8 | #include "common/swap.h" | 9 | #include "common/swap.h" |
| 9 | #include "core/file_sys/archive_selfncch.h" | 10 | #include "core/file_sys/archive_selfncch.h" |
| 10 | #include "core/file_sys/errors.h" | 11 | #include "core/file_sys/errors.h" |
| 11 | #include "core/file_sys/ivfc_archive.h" | 12 | #include "core/file_sys/ivfc_archive.h" |
| 13 | #include "core/hle/kernel/process.h" | ||
| 12 | 14 | ||
| 13 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 15 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 14 | // FileSys namespace | 16 | // FileSys namespace |
| @@ -102,8 +104,7 @@ public: | |||
| 102 | 104 | ||
| 103 | switch (static_cast<SelfNCCHFilePathType>(file_path.type)) { | 105 | switch (static_cast<SelfNCCHFilePathType>(file_path.type)) { |
| 104 | case SelfNCCHFilePathType::UpdateRomFS: | 106 | case SelfNCCHFilePathType::UpdateRomFS: |
| 105 | LOG_WARNING(Service_FS, "(STUBBED) open update RomFS"); | 107 | return OpenUpdateRomFS(); |
| 106 | return OpenRomFS(); | ||
| 107 | 108 | ||
| 108 | case SelfNCCHFilePathType::RomFS: | 109 | case SelfNCCHFilePathType::RomFS: |
| 109 | return OpenRomFS(); | 110 | return OpenRomFS(); |
| @@ -179,6 +180,17 @@ private: | |||
| 179 | } | 180 | } |
| 180 | } | 181 | } |
| 181 | 182 | ||
| 183 | ResultVal<std::unique_ptr<FileBackend>> OpenUpdateRomFS() const { | ||
| 184 | if (ncch_data.update_romfs_file) { | ||
| 185 | return MakeResult<std::unique_ptr<FileBackend>>(std::make_unique<IVFCFile>( | ||
| 186 | ncch_data.update_romfs_file, ncch_data.update_romfs_offset, | ||
| 187 | ncch_data.update_romfs_size)); | ||
| 188 | } else { | ||
| 189 | LOG_INFO(Service_FS, "Unable to read update RomFS"); | ||
| 190 | return ERROR_ROMFS_NOT_FOUND; | ||
| 191 | } | ||
| 192 | } | ||
| 193 | |||
| 182 | ResultVal<std::unique_ptr<FileBackend>> OpenExeFS(const std::string& filename) const { | 194 | ResultVal<std::unique_ptr<FileBackend>> OpenExeFS(const std::string& filename) const { |
| 183 | if (filename == "icon") { | 195 | if (filename == "icon") { |
| 184 | if (ncch_data.icon) { | 196 | if (ncch_data.icon) { |
| @@ -217,31 +229,59 @@ private: | |||
| 217 | NCCHData ncch_data; | 229 | NCCHData ncch_data; |
| 218 | }; | 230 | }; |
| 219 | 231 | ||
| 220 | ArchiveFactory_SelfNCCH::ArchiveFactory_SelfNCCH(Loader::AppLoader& app_loader) { | 232 | void ArchiveFactory_SelfNCCH::Register(Loader::AppLoader& app_loader) { |
| 233 | u64 program_id = 0; | ||
| 234 | if (app_loader.ReadProgramId(program_id) != Loader::ResultStatus::Success) { | ||
| 235 | LOG_WARNING( | ||
| 236 | Service_FS, | ||
| 237 | "Could not read program id when registering with SelfNCCH, this might be a 3dsx file"); | ||
| 238 | } | ||
| 239 | |||
| 240 | LOG_DEBUG(Service_FS, "Registering program %016" PRIX64 " with the SelfNCCH archive factory", | ||
| 241 | program_id); | ||
| 242 | |||
| 243 | if (ncch_data.find(program_id) != ncch_data.end()) { | ||
| 244 | LOG_WARNING(Service_FS, "Registering program %016" PRIX64 | ||
| 245 | " with SelfNCCH will override existing mapping", | ||
| 246 | program_id); | ||
| 247 | } | ||
| 248 | |||
| 249 | NCCHData& data = ncch_data[program_id]; | ||
| 250 | |||
| 221 | std::shared_ptr<FileUtil::IOFile> romfs_file_; | 251 | std::shared_ptr<FileUtil::IOFile> romfs_file_; |
| 222 | if (Loader::ResultStatus::Success == | 252 | if (Loader::ResultStatus::Success == |
| 223 | app_loader.ReadRomFS(romfs_file_, ncch_data.romfs_offset, ncch_data.romfs_size)) { | 253 | app_loader.ReadRomFS(romfs_file_, data.romfs_offset, data.romfs_size)) { |
| 254 | |||
| 255 | data.romfs_file = std::move(romfs_file_); | ||
| 256 | } | ||
| 257 | |||
| 258 | std::shared_ptr<FileUtil::IOFile> update_romfs_file; | ||
| 259 | if (Loader::ResultStatus::Success == | ||
| 260 | app_loader.ReadUpdateRomFS(update_romfs_file, data.update_romfs_offset, | ||
| 261 | data.update_romfs_size)) { | ||
| 224 | 262 | ||
| 225 | ncch_data.romfs_file = std::move(romfs_file_); | 263 | data.update_romfs_file = std::move(update_romfs_file); |
| 226 | } | 264 | } |
| 227 | 265 | ||
| 228 | std::vector<u8> buffer; | 266 | std::vector<u8> buffer; |
| 229 | 267 | ||
| 230 | if (Loader::ResultStatus::Success == app_loader.ReadIcon(buffer)) | 268 | if (Loader::ResultStatus::Success == app_loader.ReadIcon(buffer)) |
| 231 | ncch_data.icon = std::make_shared<std::vector<u8>>(std::move(buffer)); | 269 | data.icon = std::make_shared<std::vector<u8>>(std::move(buffer)); |
| 232 | 270 | ||
| 233 | buffer.clear(); | 271 | buffer.clear(); |
| 234 | if (Loader::ResultStatus::Success == app_loader.ReadLogo(buffer)) | 272 | if (Loader::ResultStatus::Success == app_loader.ReadLogo(buffer)) |
| 235 | ncch_data.logo = std::make_shared<std::vector<u8>>(std::move(buffer)); | 273 | data.logo = std::make_shared<std::vector<u8>>(std::move(buffer)); |
| 236 | 274 | ||
| 237 | buffer.clear(); | 275 | buffer.clear(); |
| 238 | if (Loader::ResultStatus::Success == app_loader.ReadBanner(buffer)) | 276 | if (Loader::ResultStatus::Success == app_loader.ReadBanner(buffer)) |
| 239 | ncch_data.banner = std::make_shared<std::vector<u8>>(std::move(buffer)); | 277 | data.banner = std::make_shared<std::vector<u8>>(std::move(buffer)); |
| 240 | } | 278 | } |
| 241 | 279 | ||
| 242 | ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_SelfNCCH::Open(const Path& path) { | 280 | ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_SelfNCCH::Open(const Path& path) { |
| 243 | auto archive = std::make_unique<SelfNCCHArchive>(ncch_data); | 281 | //auto archive = std::make_unique<SelfNCCHArchive>( |
| 244 | return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive)); | 282 | // ncch_data[Kernel::g_current_process->codeset->program_id]); |
| 283 | //return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive)); | ||
| 284 | return {}; | ||
| 245 | } | 285 | } |
| 246 | 286 | ||
| 247 | ResultCode ArchiveFactory_SelfNCCH::Format(const Path&, const FileSys::ArchiveFormatInfo&) { | 287 | ResultCode ArchiveFactory_SelfNCCH::Format(const Path&, const FileSys::ArchiveFormatInfo&) { |
diff --git a/src/core/file_sys/archive_selfncch.h b/src/core/file_sys/archive_selfncch.h index f1b971296..0d6d6766e 100644 --- a/src/core/file_sys/archive_selfncch.h +++ b/src/core/file_sys/archive_selfncch.h | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | #include <memory> | 7 | #include <memory> |
| 8 | #include <string> | 8 | #include <string> |
| 9 | #include <unordered_map> | ||
| 9 | #include <vector> | 10 | #include <vector> |
| 10 | #include "common/common_types.h" | 11 | #include "common/common_types.h" |
| 11 | #include "core/file_sys/archive_backend.h" | 12 | #include "core/file_sys/archive_backend.h" |
| @@ -24,12 +25,19 @@ struct NCCHData { | |||
| 24 | std::shared_ptr<FileUtil::IOFile> romfs_file; | 25 | std::shared_ptr<FileUtil::IOFile> romfs_file; |
| 25 | u64 romfs_offset = 0; | 26 | u64 romfs_offset = 0; |
| 26 | u64 romfs_size = 0; | 27 | u64 romfs_size = 0; |
| 28 | |||
| 29 | std::shared_ptr<FileUtil::IOFile> update_romfs_file; | ||
| 30 | u64 update_romfs_offset = 0; | ||
| 31 | u64 update_romfs_size = 0; | ||
| 27 | }; | 32 | }; |
| 28 | 33 | ||
| 29 | /// File system interface to the SelfNCCH archive | 34 | /// File system interface to the SelfNCCH archive |
| 30 | class ArchiveFactory_SelfNCCH final : public ArchiveFactory { | 35 | class ArchiveFactory_SelfNCCH final : public ArchiveFactory { |
| 31 | public: | 36 | public: |
| 32 | explicit ArchiveFactory_SelfNCCH(Loader::AppLoader& app_loader); | 37 | ArchiveFactory_SelfNCCH() = default; |
| 38 | |||
| 39 | /// Registers a loaded application so that we can open its SelfNCCH archive when requested. | ||
| 40 | void Register(Loader::AppLoader& app_loader); | ||
| 33 | 41 | ||
| 34 | std::string GetName() const override { | 42 | std::string GetName() const override { |
| 35 | return "SelfNCCH"; | 43 | return "SelfNCCH"; |
| @@ -39,7 +47,8 @@ public: | |||
| 39 | ResultVal<ArchiveFormatInfo> GetFormatInfo(const Path& path) const override; | 47 | ResultVal<ArchiveFormatInfo> GetFormatInfo(const Path& path) const override; |
| 40 | 48 | ||
| 41 | private: | 49 | private: |
| 42 | NCCHData ncch_data; | 50 | /// Mapping of ProgramId -> NCCHData |
| 51 | std::unordered_map<u64, NCCHData> ncch_data; | ||
| 43 | }; | 52 | }; |
| 44 | 53 | ||
| 45 | } // namespace FileSys | 54 | } // namespace FileSys |
diff --git a/src/core/file_sys/ncch_container.cpp b/src/core/file_sys/ncch_container.cpp new file mode 100644 index 000000000..b9fb940c7 --- /dev/null +++ b/src/core/file_sys/ncch_container.cpp | |||
| @@ -0,0 +1,423 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <cinttypes> | ||
| 6 | #include <cstring> | ||
| 7 | #include <memory> | ||
| 8 | #include "common/common_types.h" | ||
| 9 | #include "common/logging/log.h" | ||
| 10 | #include "core/core.h" | ||
| 11 | #include "core/file_sys/ncch_container.h" | ||
| 12 | #include "core/loader/loader.h" | ||
| 13 | |||
| 14 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 15 | // FileSys namespace | ||
| 16 | |||
| 17 | namespace FileSys { | ||
| 18 | |||
| 19 | static const int kMaxSections = 8; ///< Maximum number of sections (files) in an ExeFs | ||
| 20 | static const int kBlockSize = 0x200; ///< Size of ExeFS blocks (in bytes) | ||
| 21 | |||
| 22 | /** | ||
| 23 | * Get the decompressed size of an LZSS compressed ExeFS file | ||
| 24 | * @param buffer Buffer of compressed file | ||
| 25 | * @param size Size of compressed buffer | ||
| 26 | * @return Size of decompressed buffer | ||
| 27 | */ | ||
| 28 | static u32 LZSS_GetDecompressedSize(const u8* buffer, u32 size) { | ||
| 29 | u32 offset_size = *(u32*)(buffer + size - 4); | ||
| 30 | return offset_size + size; | ||
| 31 | } | ||
| 32 | |||
| 33 | /** | ||
| 34 | * Decompress ExeFS file (compressed with LZSS) | ||
| 35 | * @param compressed Compressed buffer | ||
| 36 | * @param compressed_size Size of compressed buffer | ||
| 37 | * @param decompressed Decompressed buffer | ||
| 38 | * @param decompressed_size Size of decompressed buffer | ||
| 39 | * @return True on success, otherwise false | ||
| 40 | */ | ||
| 41 | static bool LZSS_Decompress(const u8* compressed, u32 compressed_size, u8* decompressed, | ||
| 42 | u32 decompressed_size) { | ||
| 43 | const u8* footer = compressed + compressed_size - 8; | ||
| 44 | u32 buffer_top_and_bottom = *reinterpret_cast<const u32*>(footer); | ||
| 45 | u32 out = decompressed_size; | ||
| 46 | u32 index = compressed_size - ((buffer_top_and_bottom >> 24) & 0xFF); | ||
| 47 | u32 stop_index = compressed_size - (buffer_top_and_bottom & 0xFFFFFF); | ||
| 48 | |||
| 49 | memset(decompressed, 0, decompressed_size); | ||
| 50 | memcpy(decompressed, compressed, compressed_size); | ||
| 51 | |||
| 52 | while (index > stop_index) { | ||
| 53 | u8 control = compressed[--index]; | ||
| 54 | |||
| 55 | for (unsigned i = 0; i < 8; i++) { | ||
| 56 | if (index <= stop_index) | ||
| 57 | break; | ||
| 58 | if (index <= 0) | ||
| 59 | break; | ||
| 60 | if (out <= 0) | ||
| 61 | break; | ||
| 62 | |||
| 63 | if (control & 0x80) { | ||
| 64 | // Check if compression is out of bounds | ||
| 65 | if (index < 2) | ||
| 66 | return false; | ||
| 67 | index -= 2; | ||
| 68 | |||
| 69 | u32 segment_offset = compressed[index] | (compressed[index + 1] << 8); | ||
| 70 | u32 segment_size = ((segment_offset >> 12) & 15) + 3; | ||
| 71 | segment_offset &= 0x0FFF; | ||
| 72 | segment_offset += 2; | ||
| 73 | |||
| 74 | // Check if compression is out of bounds | ||
| 75 | if (out < segment_size) | ||
| 76 | return false; | ||
| 77 | |||
| 78 | for (unsigned j = 0; j < segment_size; j++) { | ||
| 79 | // Check if compression is out of bounds | ||
| 80 | if (out + segment_offset >= decompressed_size) | ||
| 81 | return false; | ||
| 82 | |||
| 83 | u8 data = decompressed[out + segment_offset]; | ||
| 84 | decompressed[--out] = data; | ||
| 85 | } | ||
| 86 | } else { | ||
| 87 | // Check if compression is out of bounds | ||
| 88 | if (out < 1) | ||
| 89 | return false; | ||
| 90 | decompressed[--out] = compressed[--index]; | ||
| 91 | } | ||
| 92 | control <<= 1; | ||
| 93 | } | ||
| 94 | } | ||
| 95 | return true; | ||
| 96 | } | ||
| 97 | |||
| 98 | NCCHContainer::NCCHContainer(const std::string& filepath) : filepath(filepath) { | ||
| 99 | file = FileUtil::IOFile(filepath, "rb"); | ||
| 100 | } | ||
| 101 | |||
| 102 | Loader::ResultStatus NCCHContainer::OpenFile(const std::string& filepath) { | ||
| 103 | this->filepath = filepath; | ||
| 104 | file = FileUtil::IOFile(filepath, "rb"); | ||
| 105 | |||
| 106 | if (!file.IsOpen()) { | ||
| 107 | LOG_WARNING(Service_FS, "Failed to open %s", filepath.c_str()); | ||
| 108 | return Loader::ResultStatus::Error; | ||
| 109 | } | ||
| 110 | |||
| 111 | LOG_DEBUG(Service_FS, "Opened %s", filepath.c_str()); | ||
| 112 | return Loader::ResultStatus::Success; | ||
| 113 | } | ||
| 114 | |||
| 115 | Loader::ResultStatus NCCHContainer::Load() { | ||
| 116 | if (is_loaded) | ||
| 117 | return Loader::ResultStatus::Success; | ||
| 118 | |||
| 119 | if (file.IsOpen()) { | ||
| 120 | // Reset read pointer in case this file has been read before. | ||
| 121 | file.Seek(0, SEEK_SET); | ||
| 122 | |||
| 123 | if (file.ReadBytes(&ncch_header, sizeof(NCCH_Header)) != sizeof(NCCH_Header)) | ||
| 124 | return Loader::ResultStatus::Error; | ||
| 125 | |||
| 126 | // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)... | ||
| 127 | if (Loader::MakeMagic('N', 'C', 'S', 'D') == ncch_header.magic) { | ||
| 128 | LOG_DEBUG(Service_FS, "Only loading the first (bootable) NCCH within the NCSD file!"); | ||
| 129 | ncch_offset = 0x4000; | ||
| 130 | file.Seek(ncch_offset, SEEK_SET); | ||
| 131 | file.ReadBytes(&ncch_header, sizeof(NCCH_Header)); | ||
| 132 | } | ||
| 133 | |||
| 134 | // Verify we are loading the correct file type... | ||
| 135 | if (Loader::MakeMagic('N', 'C', 'C', 'H') != ncch_header.magic) | ||
| 136 | return Loader::ResultStatus::ErrorInvalidFormat; | ||
| 137 | |||
| 138 | has_header = true; | ||
| 139 | |||
| 140 | // System archives and DLC don't have an extended header but have RomFS | ||
| 141 | if (ncch_header.extended_header_size) { | ||
| 142 | if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) != | ||
| 143 | sizeof(ExHeader_Header)) | ||
| 144 | return Loader::ResultStatus::Error; | ||
| 145 | |||
| 146 | is_compressed = (exheader_header.codeset_info.flags.flag & 1) == 1; | ||
| 147 | u32 entry_point = exheader_header.codeset_info.text.address; | ||
| 148 | u32 code_size = exheader_header.codeset_info.text.code_size; | ||
| 149 | u32 stack_size = exheader_header.codeset_info.stack_size; | ||
| 150 | u32 bss_size = exheader_header.codeset_info.bss_size; | ||
| 151 | u32 core_version = exheader_header.arm11_system_local_caps.core_version; | ||
| 152 | u8 priority = exheader_header.arm11_system_local_caps.priority; | ||
| 153 | u8 resource_limit_category = | ||
| 154 | exheader_header.arm11_system_local_caps.resource_limit_category; | ||
| 155 | |||
| 156 | LOG_DEBUG(Service_FS, "Name: %s", | ||
| 157 | exheader_header.codeset_info.name); | ||
| 158 | LOG_DEBUG(Service_FS, "Program ID: %016" PRIX64, | ||
| 159 | ncch_header.program_id); | ||
| 160 | LOG_DEBUG(Service_FS, "Code compressed: %s", is_compressed ? "yes" : "no"); | ||
| 161 | LOG_DEBUG(Service_FS, "Entry point: 0x%08X", entry_point); | ||
| 162 | LOG_DEBUG(Service_FS, "Code size: 0x%08X", code_size); | ||
| 163 | LOG_DEBUG(Service_FS, "Stack size: 0x%08X", stack_size); | ||
| 164 | LOG_DEBUG(Service_FS, "Bss size: 0x%08X", bss_size); | ||
| 165 | LOG_DEBUG(Service_FS, "Core version: %d", core_version); | ||
| 166 | LOG_DEBUG(Service_FS, "Thread priority: 0x%X", priority); | ||
| 167 | LOG_DEBUG(Service_FS, "Resource limit category: %d", resource_limit_category); | ||
| 168 | LOG_DEBUG(Service_FS, "System Mode: %d", | ||
| 169 | static_cast<int>(exheader_header.arm11_system_local_caps.system_mode)); | ||
| 170 | |||
| 171 | if (exheader_header.system_info.jump_id != ncch_header.program_id) { | ||
| 172 | LOG_ERROR(Service_FS, | ||
| 173 | "ExHeader Program ID mismatch: the ROM is probably encrypted."); | ||
| 174 | return Loader::ResultStatus::ErrorEncrypted; | ||
| 175 | } | ||
| 176 | |||
| 177 | has_exheader = true; | ||
| 178 | } | ||
| 179 | |||
| 180 | // DLC can have an ExeFS and a RomFS but no extended header | ||
| 181 | if (ncch_header.exefs_size) { | ||
| 182 | exefs_offset = ncch_header.exefs_offset * kBlockSize; | ||
| 183 | u32 exefs_size = ncch_header.exefs_size * kBlockSize; | ||
| 184 | |||
| 185 | LOG_DEBUG(Service_FS, "ExeFS offset: 0x%08X", exefs_offset); | ||
| 186 | LOG_DEBUG(Service_FS, "ExeFS size: 0x%08X", exefs_size); | ||
| 187 | |||
| 188 | file.Seek(exefs_offset + ncch_offset, SEEK_SET); | ||
| 189 | if (file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) != sizeof(ExeFs_Header)) | ||
| 190 | return Loader::ResultStatus::Error; | ||
| 191 | |||
| 192 | exefs_file = FileUtil::IOFile(filepath, "rb"); | ||
| 193 | has_exefs = true; | ||
| 194 | } | ||
| 195 | |||
| 196 | if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) | ||
| 197 | has_romfs = true; | ||
| 198 | } | ||
| 199 | |||
| 200 | LoadOverrides(); | ||
| 201 | |||
| 202 | // We need at least one of these or overrides, practically | ||
| 203 | if (!(has_exefs || has_romfs || is_tainted)) | ||
| 204 | return Loader::ResultStatus::Error; | ||
| 205 | |||
| 206 | is_loaded = true; | ||
| 207 | return Loader::ResultStatus::Success; | ||
| 208 | } | ||
| 209 | |||
| 210 | Loader::ResultStatus NCCHContainer::LoadOverrides() { | ||
| 211 | // Check for split-off files, mark the archive as tainted if we will use them | ||
| 212 | std::string romfs_override = filepath + ".romfs"; | ||
| 213 | if (FileUtil::Exists(romfs_override)) { | ||
| 214 | is_tainted = true; | ||
| 215 | } | ||
| 216 | |||
| 217 | // If we have a split-off exefs file/folder, it takes priority | ||
| 218 | std::string exefs_override = filepath + ".exefs"; | ||
| 219 | std::string exefsdir_override = filepath + ".exefsdir/"; | ||
| 220 | if (FileUtil::Exists(exefs_override)) { | ||
| 221 | exefs_file = FileUtil::IOFile(exefs_override, "rb"); | ||
| 222 | |||
| 223 | if (exefs_file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) == sizeof(ExeFs_Header)) { | ||
| 224 | LOG_DEBUG(Service_FS, "Loading ExeFS section from %s", exefs_override.c_str()); | ||
| 225 | exefs_offset = 0; | ||
| 226 | is_tainted = true; | ||
| 227 | has_exefs = true; | ||
| 228 | } else { | ||
| 229 | exefs_file = FileUtil::IOFile(filepath, "rb"); | ||
| 230 | } | ||
| 231 | } else if (FileUtil::Exists(exefsdir_override) && FileUtil::IsDirectory(exefsdir_override)) { | ||
| 232 | is_tainted = true; | ||
| 233 | } | ||
| 234 | |||
| 235 | if (is_tainted) | ||
| 236 | LOG_WARNING(Service_FS, | ||
| 237 | "Loaded NCCH %s is tainted, application behavior may not be as expected!", | ||
| 238 | filepath.c_str()); | ||
| 239 | |||
| 240 | return Loader::ResultStatus::Success; | ||
| 241 | } | ||
| 242 | |||
| 243 | Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vector<u8>& buffer) { | ||
| 244 | Loader::ResultStatus result = Load(); | ||
| 245 | if (result != Loader::ResultStatus::Success) | ||
| 246 | return result; | ||
| 247 | |||
| 248 | // Check if we have files that can drop-in and replace | ||
| 249 | result = LoadOverrideExeFSSection(name, buffer); | ||
| 250 | if (result == Loader::ResultStatus::Success || !has_exefs) | ||
| 251 | return result; | ||
| 252 | |||
| 253 | // If we don't have any separate files, we'll need a full ExeFS | ||
| 254 | if (!exefs_file.IsOpen()) | ||
| 255 | return Loader::ResultStatus::Error; | ||
| 256 | |||
| 257 | LOG_DEBUG(Service_FS, "%d sections:", kMaxSections); | ||
| 258 | // Iterate through the ExeFs archive until we find a section with the specified name... | ||
| 259 | for (unsigned section_number = 0; section_number < kMaxSections; section_number++) { | ||
| 260 | const auto& section = exefs_header.section[section_number]; | ||
| 261 | |||
| 262 | // Load the specified section... | ||
| 263 | if (strcmp(section.name, name) == 0) { | ||
| 264 | LOG_DEBUG(Service_FS, "%d - offset: 0x%08X, size: 0x%08X, name: %s", section_number, | ||
| 265 | section.offset, section.size, section.name); | ||
| 266 | |||
| 267 | s64 section_offset = | ||
| 268 | (section.offset + exefs_offset + sizeof(ExeFs_Header) + ncch_offset); | ||
| 269 | exefs_file.Seek(section_offset, SEEK_SET); | ||
| 270 | |||
| 271 | if (strcmp(section.name, ".code") == 0 && is_compressed) { | ||
| 272 | // Section is compressed, read compressed .code section... | ||
| 273 | std::unique_ptr<u8[]> temp_buffer; | ||
| 274 | try { | ||
| 275 | temp_buffer.reset(new u8[section.size]); | ||
| 276 | } catch (std::bad_alloc&) { | ||
| 277 | return Loader::ResultStatus::ErrorMemoryAllocationFailed; | ||
| 278 | } | ||
| 279 | |||
| 280 | if (exefs_file.ReadBytes(&temp_buffer[0], section.size) != section.size) | ||
| 281 | return Loader::ResultStatus::Error; | ||
| 282 | |||
| 283 | // Decompress .code section... | ||
| 284 | u32 decompressed_size = LZSS_GetDecompressedSize(&temp_buffer[0], section.size); | ||
| 285 | buffer.resize(decompressed_size); | ||
| 286 | if (!LZSS_Decompress(&temp_buffer[0], section.size, &buffer[0], decompressed_size)) | ||
| 287 | return Loader::ResultStatus::ErrorInvalidFormat; | ||
| 288 | } else { | ||
| 289 | // Section is uncompressed... | ||
| 290 | buffer.resize(section.size); | ||
| 291 | if (exefs_file.ReadBytes(&buffer[0], section.size) != section.size) | ||
| 292 | return Loader::ResultStatus::Error; | ||
| 293 | } | ||
| 294 | return Loader::ResultStatus::Success; | ||
| 295 | } | ||
| 296 | } | ||
| 297 | return Loader::ResultStatus::ErrorNotUsed; | ||
| 298 | } | ||
| 299 | |||
| 300 | Loader::ResultStatus NCCHContainer::LoadOverrideExeFSSection(const char* name, | ||
| 301 | std::vector<u8>& buffer) { | ||
| 302 | std::string override_name; | ||
| 303 | |||
| 304 | // Map our section name to the extracted equivalent | ||
| 305 | if (!strcmp(name, ".code")) | ||
| 306 | override_name = "code.bin"; | ||
| 307 | else if (!strcmp(name, "icon")) | ||
| 308 | override_name = "code.bin"; | ||
| 309 | else if (!strcmp(name, "banner")) | ||
| 310 | override_name = "banner.bnr"; | ||
| 311 | else if (!strcmp(name, "logo")) | ||
| 312 | override_name = "logo.bcma.lz"; | ||
| 313 | else | ||
| 314 | return Loader::ResultStatus::Error; | ||
| 315 | |||
| 316 | std::string section_override = filepath + ".exefsdir/" + override_name; | ||
| 317 | FileUtil::IOFile section_file(section_override, "rb"); | ||
| 318 | |||
| 319 | if (section_file.IsOpen()) { | ||
| 320 | auto section_size = section_file.GetSize(); | ||
| 321 | buffer.resize(section_size); | ||
| 322 | |||
| 323 | section_file.Seek(0, SEEK_SET); | ||
| 324 | if (section_file.ReadBytes(&buffer[0], section_size) == section_size) { | ||
| 325 | LOG_WARNING(Service_FS, "File %s overriding built-in ExeFS file", | ||
| 326 | section_override.c_str()); | ||
| 327 | return Loader::ResultStatus::Success; | ||
| 328 | } | ||
| 329 | } | ||
| 330 | return Loader::ResultStatus::ErrorNotUsed; | ||
| 331 | } | ||
| 332 | |||
| 333 | Loader::ResultStatus NCCHContainer::ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, | ||
| 334 | u64& offset, u64& size) { | ||
| 335 | Loader::ResultStatus result = Load(); | ||
| 336 | if (result != Loader::ResultStatus::Success) | ||
| 337 | return result; | ||
| 338 | |||
| 339 | if (ReadOverrideRomFS(romfs_file, offset, size) == Loader::ResultStatus::Success) | ||
| 340 | return Loader::ResultStatus::Success; | ||
| 341 | |||
| 342 | if (!has_romfs) { | ||
| 343 | LOG_DEBUG(Service_FS, "RomFS requested from NCCH which has no RomFS"); | ||
| 344 | return Loader::ResultStatus::ErrorNotUsed; | ||
| 345 | } | ||
| 346 | |||
| 347 | if (!file.IsOpen()) | ||
| 348 | return Loader::ResultStatus::Error; | ||
| 349 | |||
| 350 | u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000; | ||
| 351 | u32 romfs_size = (ncch_header.romfs_size * kBlockSize) - 0x1000; | ||
| 352 | |||
| 353 | LOG_DEBUG(Service_FS, "RomFS offset: 0x%08X", romfs_offset); | ||
| 354 | LOG_DEBUG(Service_FS, "RomFS size: 0x%08X", romfs_size); | ||
| 355 | |||
| 356 | if (file.GetSize() < romfs_offset + romfs_size) | ||
| 357 | return Loader::ResultStatus::Error; | ||
| 358 | |||
| 359 | // We reopen the file, to allow its position to be independent from file's | ||
| 360 | romfs_file = std::make_shared<FileUtil::IOFile>(filepath, "rb"); | ||
| 361 | if (!romfs_file->IsOpen()) | ||
| 362 | return Loader::ResultStatus::Error; | ||
| 363 | |||
| 364 | offset = romfs_offset; | ||
| 365 | size = romfs_size; | ||
| 366 | |||
| 367 | return Loader::ResultStatus::Success; | ||
| 368 | } | ||
| 369 | |||
| 370 | Loader::ResultStatus NCCHContainer::ReadOverrideRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, | ||
| 371 | u64& offset, u64& size) { | ||
| 372 | // Check for RomFS overrides | ||
| 373 | std::string split_filepath = filepath + ".romfs"; | ||
| 374 | if (FileUtil::Exists(split_filepath)) { | ||
| 375 | romfs_file = std::make_shared<FileUtil::IOFile>(split_filepath, "rb"); | ||
| 376 | if (romfs_file->IsOpen()) { | ||
| 377 | LOG_WARNING(Service_FS, "File %s overriding built-in RomFS", split_filepath.c_str()); | ||
| 378 | offset = 0; | ||
| 379 | size = romfs_file->GetSize(); | ||
| 380 | return Loader::ResultStatus::Success; | ||
| 381 | } | ||
| 382 | } | ||
| 383 | |||
| 384 | return Loader::ResultStatus::ErrorNotUsed; | ||
| 385 | } | ||
| 386 | |||
| 387 | Loader::ResultStatus NCCHContainer::ReadProgramId(u64_le& program_id) { | ||
| 388 | Loader::ResultStatus result = Load(); | ||
| 389 | if (result != Loader::ResultStatus::Success) | ||
| 390 | return result; | ||
| 391 | |||
| 392 | if (!has_header) | ||
| 393 | return Loader::ResultStatus::ErrorNotUsed; | ||
| 394 | |||
| 395 | program_id = ncch_header.program_id; | ||
| 396 | return Loader::ResultStatus::Success; | ||
| 397 | } | ||
| 398 | |||
| 399 | bool NCCHContainer::HasExeFS() { | ||
| 400 | Loader::ResultStatus result = Load(); | ||
| 401 | if (result != Loader::ResultStatus::Success) | ||
| 402 | return false; | ||
| 403 | |||
| 404 | return has_exefs; | ||
| 405 | } | ||
| 406 | |||
| 407 | bool NCCHContainer::HasRomFS() { | ||
| 408 | Loader::ResultStatus result = Load(); | ||
| 409 | if (result != Loader::ResultStatus::Success) | ||
| 410 | return false; | ||
| 411 | |||
| 412 | return has_romfs; | ||
| 413 | } | ||
| 414 | |||
| 415 | bool NCCHContainer::HasExHeader() { | ||
| 416 | Loader::ResultStatus result = Load(); | ||
| 417 | if (result != Loader::ResultStatus::Success) | ||
| 418 | return false; | ||
| 419 | |||
| 420 | return has_exheader; | ||
| 421 | } | ||
| 422 | |||
| 423 | } // namespace FileSys | ||
diff --git a/src/core/file_sys/ncch_container.h b/src/core/file_sys/ncch_container.h new file mode 100644 index 000000000..2cc9d13dc --- /dev/null +++ b/src/core/file_sys/ncch_container.h | |||
| @@ -0,0 +1,274 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <cstddef> | ||
| 8 | #include <memory> | ||
| 9 | #include <string> | ||
| 10 | #include <vector> | ||
| 11 | #include "common/bit_field.h" | ||
| 12 | #include "common/common_types.h" | ||
| 13 | #include "common/file_util.h" | ||
| 14 | #include "common/swap.h" | ||
| 15 | #include "core/core.h" | ||
| 16 | |||
| 17 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 18 | /// NCCH header (Note: "NCCH" appears to be a publicly unknown acronym) | ||
| 19 | |||
| 20 | struct NCCH_Header { | ||
| 21 | u8 signature[0x100]; | ||
| 22 | u32_le magic; | ||
| 23 | u32_le content_size; | ||
| 24 | u8 partition_id[8]; | ||
| 25 | u16_le maker_code; | ||
| 26 | u16_le version; | ||
| 27 | u8 reserved_0[4]; | ||
| 28 | u64_le program_id; | ||
| 29 | u8 reserved_1[0x10]; | ||
| 30 | u8 logo_region_hash[0x20]; | ||
| 31 | u8 product_code[0x10]; | ||
| 32 | u8 extended_header_hash[0x20]; | ||
| 33 | u32_le extended_header_size; | ||
| 34 | u8 reserved_2[4]; | ||
| 35 | u8 flags[8]; | ||
| 36 | u32_le plain_region_offset; | ||
| 37 | u32_le plain_region_size; | ||
| 38 | u32_le logo_region_offset; | ||
| 39 | u32_le logo_region_size; | ||
| 40 | u32_le exefs_offset; | ||
| 41 | u32_le exefs_size; | ||
| 42 | u32_le exefs_hash_region_size; | ||
| 43 | u8 reserved_3[4]; | ||
| 44 | u32_le romfs_offset; | ||
| 45 | u32_le romfs_size; | ||
| 46 | u32_le romfs_hash_region_size; | ||
| 47 | u8 reserved_4[4]; | ||
| 48 | u8 exefs_super_block_hash[0x20]; | ||
| 49 | u8 romfs_super_block_hash[0x20]; | ||
| 50 | }; | ||
| 51 | |||
| 52 | static_assert(sizeof(NCCH_Header) == 0x200, "NCCH header structure size is wrong"); | ||
| 53 | |||
| 54 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 55 | // ExeFS (executable file system) headers | ||
| 56 | |||
| 57 | struct ExeFs_SectionHeader { | ||
| 58 | char name[8]; | ||
| 59 | u32 offset; | ||
| 60 | u32 size; | ||
| 61 | }; | ||
| 62 | |||
| 63 | struct ExeFs_Header { | ||
| 64 | ExeFs_SectionHeader section[8]; | ||
| 65 | u8 reserved[0x80]; | ||
| 66 | u8 hashes[8][0x20]; | ||
| 67 | }; | ||
| 68 | |||
| 69 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 70 | // ExHeader (executable file system header) headers | ||
| 71 | |||
| 72 | struct ExHeader_SystemInfoFlags { | ||
| 73 | u8 reserved[5]; | ||
| 74 | u8 flag; | ||
| 75 | u8 remaster_version[2]; | ||
| 76 | }; | ||
| 77 | |||
| 78 | struct ExHeader_CodeSegmentInfo { | ||
| 79 | u32 address; | ||
| 80 | u32 num_max_pages; | ||
| 81 | u32 code_size; | ||
| 82 | }; | ||
| 83 | |||
| 84 | struct ExHeader_CodeSetInfo { | ||
| 85 | u8 name[8]; | ||
| 86 | ExHeader_SystemInfoFlags flags; | ||
| 87 | ExHeader_CodeSegmentInfo text; | ||
| 88 | u32 stack_size; | ||
| 89 | ExHeader_CodeSegmentInfo ro; | ||
| 90 | u8 reserved[4]; | ||
| 91 | ExHeader_CodeSegmentInfo data; | ||
| 92 | u32 bss_size; | ||
| 93 | }; | ||
| 94 | |||
| 95 | struct ExHeader_DependencyList { | ||
| 96 | u8 program_id[0x30][8]; | ||
| 97 | }; | ||
| 98 | |||
| 99 | struct ExHeader_SystemInfo { | ||
| 100 | u64 save_data_size; | ||
| 101 | u64_le jump_id; | ||
| 102 | u8 reserved_2[0x30]; | ||
| 103 | }; | ||
| 104 | |||
| 105 | struct ExHeader_StorageInfo { | ||
| 106 | u8 ext_save_data_id[8]; | ||
| 107 | u8 system_save_data_id[8]; | ||
| 108 | u8 reserved[8]; | ||
| 109 | u8 access_info[7]; | ||
| 110 | u8 other_attributes; | ||
| 111 | }; | ||
| 112 | |||
| 113 | struct ExHeader_ARM11_SystemLocalCaps { | ||
| 114 | u64_le program_id; | ||
| 115 | u32_le core_version; | ||
| 116 | u8 reserved_flags[2]; | ||
| 117 | union { | ||
| 118 | u8 flags0; | ||
| 119 | BitField<0, 2, u8> ideal_processor; | ||
| 120 | BitField<2, 2, u8> affinity_mask; | ||
| 121 | BitField<4, 4, u8> system_mode; | ||
| 122 | }; | ||
| 123 | u8 priority; | ||
| 124 | u8 resource_limit_descriptor[0x10][2]; | ||
| 125 | ExHeader_StorageInfo storage_info; | ||
| 126 | u8 service_access_control[0x20][8]; | ||
| 127 | u8 ex_service_access_control[0x2][8]; | ||
| 128 | u8 reserved[0xf]; | ||
| 129 | u8 resource_limit_category; | ||
| 130 | }; | ||
| 131 | |||
| 132 | struct ExHeader_ARM11_KernelCaps { | ||
| 133 | u32_le descriptors[28]; | ||
| 134 | u8 reserved[0x10]; | ||
| 135 | }; | ||
| 136 | |||
| 137 | struct ExHeader_ARM9_AccessControl { | ||
| 138 | u8 descriptors[15]; | ||
| 139 | u8 descversion; | ||
| 140 | }; | ||
| 141 | |||
| 142 | struct ExHeader_Header { | ||
| 143 | ExHeader_CodeSetInfo codeset_info; | ||
| 144 | ExHeader_DependencyList dependency_list; | ||
| 145 | ExHeader_SystemInfo system_info; | ||
| 146 | ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps; | ||
| 147 | ExHeader_ARM11_KernelCaps arm11_kernel_caps; | ||
| 148 | ExHeader_ARM9_AccessControl arm9_access_control; | ||
| 149 | struct { | ||
| 150 | u8 signature[0x100]; | ||
| 151 | u8 ncch_public_key_modulus[0x100]; | ||
| 152 | ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps; | ||
| 153 | ExHeader_ARM11_KernelCaps arm11_kernel_caps; | ||
| 154 | ExHeader_ARM9_AccessControl arm9_access_control; | ||
| 155 | } access_desc; | ||
| 156 | }; | ||
| 157 | |||
| 158 | static_assert(sizeof(ExHeader_Header) == 0x800, "ExHeader structure size is wrong"); | ||
| 159 | |||
| 160 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 161 | // FileSys namespace | ||
| 162 | |||
| 163 | namespace FileSys { | ||
| 164 | |||
| 165 | /** | ||
| 166 | * Helper which implements an interface to deal with NCCH containers which can | ||
| 167 | * contain ExeFS archives or RomFS archives for games or other applications. | ||
| 168 | */ | ||
| 169 | class NCCHContainer { | ||
| 170 | public: | ||
| 171 | NCCHContainer(const std::string& filepath); | ||
| 172 | NCCHContainer() {} | ||
| 173 | |||
| 174 | Loader::ResultStatus OpenFile(const std::string& filepath); | ||
| 175 | |||
| 176 | /** | ||
| 177 | * Ensure ExeFS and exheader is loaded and ready for reading sections | ||
| 178 | * @return ResultStatus result of function | ||
| 179 | */ | ||
| 180 | Loader::ResultStatus Load(); | ||
| 181 | |||
| 182 | /** | ||
| 183 | * Attempt to find overridden sections for the NCCH and mark the container as tainted | ||
| 184 | * if any are found. | ||
| 185 | * @return ResultStatus result of function | ||
| 186 | */ | ||
| 187 | Loader::ResultStatus LoadOverrides(); | ||
| 188 | |||
| 189 | /** | ||
| 190 | * Reads an application ExeFS section of an NCCH file (e.g. .code, .logo, etc.) | ||
| 191 | * @param name Name of section to read out of NCCH file | ||
| 192 | * @param buffer Vector to read data into | ||
| 193 | * @return ResultStatus result of function | ||
| 194 | */ | ||
| 195 | Loader::ResultStatus LoadSectionExeFS(const char* name, std::vector<u8>& buffer); | ||
| 196 | |||
| 197 | /** | ||
| 198 | * Reads an application ExeFS section from external files instead of an NCCH file, | ||
| 199 | * (e.g. code.bin, logo.bcma.lz, icon.icn, banner.bnr) | ||
| 200 | * @param name Name of section to read from external files | ||
| 201 | * @param buffer Vector to read data into | ||
| 202 | * @return ResultStatus result of function | ||
| 203 | */ | ||
| 204 | Loader::ResultStatus LoadOverrideExeFSSection(const char* name, std::vector<u8>& buffer); | ||
| 205 | |||
| 206 | /** | ||
| 207 | * Get the RomFS of the NCCH container | ||
| 208 | * Since the RomFS can be huge, we return a file reference instead of copying to a buffer | ||
| 209 | * @param romfs_file The file containing the RomFS | ||
| 210 | * @param offset The offset the romfs begins on | ||
| 211 | * @param size The size of the romfs | ||
| 212 | * @return ResultStatus result of function | ||
| 213 | */ | ||
| 214 | Loader::ResultStatus ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, | ||
| 215 | u64& size); | ||
| 216 | |||
| 217 | /** | ||
| 218 | * Get the override RomFS of the NCCH container | ||
| 219 | * Since the RomFS can be huge, we return a file reference instead of copying to a buffer | ||
| 220 | * @param romfs_file The file containing the RomFS | ||
| 221 | * @param offset The offset the romfs begins on | ||
| 222 | * @param size The size of the romfs | ||
| 223 | * @return ResultStatus result of function | ||
| 224 | */ | ||
| 225 | Loader::ResultStatus ReadOverrideRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, | ||
| 226 | u64& offset, u64& size); | ||
| 227 | |||
| 228 | /** | ||
| 229 | * Get the Program ID of the NCCH container | ||
| 230 | * @return ResultStatus result of function | ||
| 231 | */ | ||
| 232 | Loader::ResultStatus ReadProgramId(u64_le& program_id); | ||
| 233 | |||
| 234 | /** | ||
| 235 | * Checks whether the NCCH container contains an ExeFS | ||
| 236 | * @return bool check result | ||
| 237 | */ | ||
| 238 | bool HasExeFS(); | ||
| 239 | |||
| 240 | /** | ||
| 241 | * Checks whether the NCCH container contains a RomFS | ||
| 242 | * @return bool check result | ||
| 243 | */ | ||
| 244 | bool HasRomFS(); | ||
| 245 | |||
| 246 | /** | ||
| 247 | * Checks whether the NCCH container contains an ExHeader | ||
| 248 | * @return bool check result | ||
| 249 | */ | ||
| 250 | bool HasExHeader(); | ||
| 251 | |||
| 252 | NCCH_Header ncch_header; | ||
| 253 | ExeFs_Header exefs_header; | ||
| 254 | ExHeader_Header exheader_header; | ||
| 255 | |||
| 256 | private: | ||
| 257 | bool has_header = false; | ||
| 258 | bool has_exheader = false; | ||
| 259 | bool has_exefs = false; | ||
| 260 | bool has_romfs = false; | ||
| 261 | |||
| 262 | bool is_tainted = false; // Are there parts of this container being overridden? | ||
| 263 | bool is_loaded = false; | ||
| 264 | bool is_compressed = false; | ||
| 265 | |||
| 266 | u32 ncch_offset = 0; // Offset to NCCH header, can be 0 or after NCSD header | ||
| 267 | u32 exefs_offset = 0; | ||
| 268 | |||
| 269 | std::string filepath; | ||
| 270 | FileUtil::IOFile file; | ||
| 271 | FileUtil::IOFile exefs_file; | ||
| 272 | }; | ||
| 273 | |||
| 274 | } // namespace FileSys | ||
diff --git a/src/core/file_sys/savedata_archive.cpp b/src/core/file_sys/savedata_archive.cpp index f540c4a93..f8f811ba0 100644 --- a/src/core/file_sys/savedata_archive.cpp +++ b/src/core/file_sys/savedata_archive.cpp | |||
| @@ -106,7 +106,25 @@ ResultCode SaveDataArchive::DeleteFile(const Path& path) const { | |||
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | ResultCode SaveDataArchive::RenameFile(const Path& src_path, const Path& dest_path) const { | 108 | ResultCode SaveDataArchive::RenameFile(const Path& src_path, const Path& dest_path) const { |
| 109 | if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) { | 109 | const PathParser path_parser_src(src_path); |
| 110 | |||
| 111 | // TODO: Verify these return codes with HW | ||
| 112 | if (!path_parser_src.IsValid()) { | ||
| 113 | LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str()); | ||
| 114 | return ERROR_INVALID_PATH; | ||
| 115 | } | ||
| 116 | |||
| 117 | const PathParser path_parser_dest(dest_path); | ||
| 118 | |||
| 119 | if (!path_parser_dest.IsValid()) { | ||
| 120 | LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str()); | ||
| 121 | return ERROR_INVALID_PATH; | ||
| 122 | } | ||
| 123 | |||
| 124 | const auto src_path_full = path_parser_src.BuildHostPath(mount_point); | ||
| 125 | const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point); | ||
| 126 | |||
| 127 | if (FileUtil::Rename(src_path_full, dest_path_full)) { | ||
| 110 | return RESULT_SUCCESS; | 128 | return RESULT_SUCCESS; |
| 111 | } | 129 | } |
| 112 | 130 | ||
| @@ -247,8 +265,27 @@ ResultCode SaveDataArchive::CreateDirectory(const Path& path) const { | |||
| 247 | } | 265 | } |
| 248 | 266 | ||
| 249 | ResultCode SaveDataArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const { | 267 | ResultCode SaveDataArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const { |
| 250 | if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) | 268 | const PathParser path_parser_src(src_path); |
| 269 | |||
| 270 | // TODO: Verify these return codes with HW | ||
| 271 | if (!path_parser_src.IsValid()) { | ||
| 272 | LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str()); | ||
| 273 | return ERROR_INVALID_PATH; | ||
| 274 | } | ||
| 275 | |||
| 276 | const PathParser path_parser_dest(dest_path); | ||
| 277 | |||
| 278 | if (!path_parser_dest.IsValid()) { | ||
| 279 | LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str()); | ||
| 280 | return ERROR_INVALID_PATH; | ||
| 281 | } | ||
| 282 | |||
| 283 | const auto src_path_full = path_parser_src.BuildHostPath(mount_point); | ||
| 284 | const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point); | ||
| 285 | |||
| 286 | if (FileUtil::Rename(src_path_full, dest_path_full)) { | ||
| 251 | return RESULT_SUCCESS; | 287 | return RESULT_SUCCESS; |
| 288 | } | ||
| 252 | 289 | ||
| 253 | // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't | 290 | // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't |
| 254 | // exist or similar. Verify. | 291 | // exist or similar. Verify. |
diff --git a/src/core/file_sys/title_metadata.cpp b/src/core/file_sys/title_metadata.cpp new file mode 100644 index 000000000..1ef8840a0 --- /dev/null +++ b/src/core/file_sys/title_metadata.cpp | |||
| @@ -0,0 +1,212 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <cinttypes> | ||
| 6 | #include <cryptopp/sha.h> | ||
| 7 | #include "common/alignment.h" | ||
| 8 | #include "common/file_util.h" | ||
| 9 | #include "common/logging/log.h" | ||
| 10 | #include "core/file_sys/title_metadata.h" | ||
| 11 | #include "core/loader/loader.h" | ||
| 12 | |||
| 13 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 14 | // FileSys namespace | ||
| 15 | |||
| 16 | namespace FileSys { | ||
| 17 | |||
| 18 | static u32 GetSignatureSize(u32 signature_type) { | ||
| 19 | switch (signature_type) { | ||
| 20 | case Rsa4096Sha1: | ||
| 21 | case Rsa4096Sha256: | ||
| 22 | return 0x200; | ||
| 23 | |||
| 24 | case Rsa2048Sha1: | ||
| 25 | case Rsa2048Sha256: | ||
| 26 | return 0x100; | ||
| 27 | |||
| 28 | case EllipticSha1: | ||
| 29 | case EcdsaSha256: | ||
| 30 | return 0x3C; | ||
| 31 | } | ||
| 32 | } | ||
| 33 | |||
| 34 | Loader::ResultStatus TitleMetadata::Load() { | ||
| 35 | FileUtil::IOFile file(filepath, "rb"); | ||
| 36 | if (!file.IsOpen()) | ||
| 37 | return Loader::ResultStatus::Error; | ||
| 38 | |||
| 39 | if (!file.ReadBytes(&signature_type, sizeof(u32_be))) | ||
| 40 | return Loader::ResultStatus::Error; | ||
| 41 | |||
| 42 | // Signature lengths are variable, and the body follows the signature | ||
| 43 | u32 signature_size = GetSignatureSize(signature_type); | ||
| 44 | |||
| 45 | tmd_signature.resize(signature_size); | ||
| 46 | if (!file.ReadBytes(&tmd_signature[0], signature_size)) | ||
| 47 | return Loader::ResultStatus::Error; | ||
| 48 | |||
| 49 | // The TMD body start position is rounded to the nearest 0x40 after the signature | ||
| 50 | size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40); | ||
| 51 | file.Seek(body_start, SEEK_SET); | ||
| 52 | |||
| 53 | // Read our TMD body, then load the amount of ContentChunks specified | ||
| 54 | if (file.ReadBytes(&tmd_body, sizeof(TitleMetadata::Body)) != sizeof(TitleMetadata::Body)) | ||
| 55 | return Loader::ResultStatus::Error; | ||
| 56 | |||
| 57 | for (u16 i = 0; i < tmd_body.content_count; i++) { | ||
| 58 | ContentChunk chunk; | ||
| 59 | if (file.ReadBytes(&chunk, sizeof(ContentChunk)) == sizeof(ContentChunk)) { | ||
| 60 | tmd_chunks.push_back(chunk); | ||
| 61 | } else { | ||
| 62 | LOG_ERROR(Service_FS, "Malformed TMD %s, failed to load content chunk index %u!", | ||
| 63 | filepath.c_str(), i); | ||
| 64 | return Loader::ResultStatus::ErrorInvalidFormat; | ||
| 65 | } | ||
| 66 | } | ||
| 67 | |||
| 68 | return Loader::ResultStatus::Success; | ||
| 69 | } | ||
| 70 | |||
| 71 | Loader::ResultStatus TitleMetadata::Save() { | ||
| 72 | FileUtil::IOFile file(filepath, "wb"); | ||
| 73 | if (!file.IsOpen()) | ||
| 74 | return Loader::ResultStatus::Error; | ||
| 75 | |||
| 76 | if (!file.WriteBytes(&signature_type, sizeof(u32_be))) | ||
| 77 | return Loader::ResultStatus::Error; | ||
| 78 | |||
| 79 | // Signature lengths are variable, and the body follows the signature | ||
| 80 | u32 signature_size = GetSignatureSize(signature_type); | ||
| 81 | |||
| 82 | if (!file.WriteBytes(tmd_signature.data(), signature_size)) | ||
| 83 | return Loader::ResultStatus::Error; | ||
| 84 | |||
| 85 | // The TMD body start position is rounded to the nearest 0x40 after the signature | ||
| 86 | size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40); | ||
| 87 | file.Seek(body_start, SEEK_SET); | ||
| 88 | |||
| 89 | // Update our TMD body values and hashes | ||
| 90 | tmd_body.content_count = static_cast<u16>(tmd_chunks.size()); | ||
| 91 | |||
| 92 | // TODO(shinyquagsire23): Do TMDs with more than one contentinfo exist? | ||
| 93 | // For now we'll just adjust the first index to hold all content chunks | ||
| 94 | // and ensure that no further content info data exists. | ||
| 95 | tmd_body.contentinfo = {}; | ||
| 96 | tmd_body.contentinfo[0].index = 0; | ||
| 97 | tmd_body.contentinfo[0].command_count = static_cast<u16>(tmd_chunks.size()); | ||
| 98 | |||
| 99 | CryptoPP::SHA256 chunk_hash; | ||
| 100 | for (u16 i = 0; i < tmd_body.content_count; i++) { | ||
| 101 | chunk_hash.Update(reinterpret_cast<u8*>(&tmd_chunks[i]), sizeof(ContentChunk)); | ||
| 102 | } | ||
| 103 | chunk_hash.Final(tmd_body.contentinfo[0].hash.data()); | ||
| 104 | |||
| 105 | CryptoPP::SHA256 contentinfo_hash; | ||
| 106 | for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) { | ||
| 107 | chunk_hash.Update(reinterpret_cast<u8*>(&tmd_body.contentinfo[i]), sizeof(ContentInfo)); | ||
| 108 | } | ||
| 109 | chunk_hash.Final(tmd_body.contentinfo_hash.data()); | ||
| 110 | |||
| 111 | // Write our TMD body, then write each of our ContentChunks | ||
| 112 | if (file.WriteBytes(&tmd_body, sizeof(TitleMetadata::Body)) != sizeof(TitleMetadata::Body)) | ||
| 113 | return Loader::ResultStatus::Error; | ||
| 114 | |||
| 115 | for (u16 i = 0; i < tmd_body.content_count; i++) { | ||
| 116 | ContentChunk chunk = tmd_chunks[i]; | ||
| 117 | if (file.WriteBytes(&chunk, sizeof(ContentChunk)) != sizeof(ContentChunk)) | ||
| 118 | return Loader::ResultStatus::Error; | ||
| 119 | } | ||
| 120 | |||
| 121 | return Loader::ResultStatus::Success; | ||
| 122 | } | ||
| 123 | |||
| 124 | u64 TitleMetadata::GetTitleID() const { | ||
| 125 | return tmd_body.title_id; | ||
| 126 | } | ||
| 127 | |||
| 128 | u32 TitleMetadata::GetTitleType() const { | ||
| 129 | return tmd_body.title_type; | ||
| 130 | } | ||
| 131 | |||
| 132 | u16 TitleMetadata::GetTitleVersion() const { | ||
| 133 | return tmd_body.title_version; | ||
| 134 | } | ||
| 135 | |||
| 136 | u64 TitleMetadata::GetSystemVersion() const { | ||
| 137 | return tmd_body.system_version; | ||
| 138 | } | ||
| 139 | |||
| 140 | size_t TitleMetadata::GetContentCount() const { | ||
| 141 | return tmd_chunks.size(); | ||
| 142 | } | ||
| 143 | |||
| 144 | u32 TitleMetadata::GetBootContentID() const { | ||
| 145 | return tmd_chunks[TMDContentIndex::Main].id; | ||
| 146 | } | ||
| 147 | |||
| 148 | u32 TitleMetadata::GetManualContentID() const { | ||
| 149 | return tmd_chunks[TMDContentIndex::Manual].id; | ||
| 150 | } | ||
| 151 | |||
| 152 | u32 TitleMetadata::GetDLPContentID() const { | ||
| 153 | return tmd_chunks[TMDContentIndex::DLP].id; | ||
| 154 | } | ||
| 155 | |||
| 156 | void TitleMetadata::SetTitleID(u64 title_id) { | ||
| 157 | tmd_body.title_id = title_id; | ||
| 158 | } | ||
| 159 | |||
| 160 | void TitleMetadata::SetTitleType(u32 type) { | ||
| 161 | tmd_body.title_type = type; | ||
| 162 | } | ||
| 163 | |||
| 164 | void TitleMetadata::SetTitleVersion(u16 version) { | ||
| 165 | tmd_body.title_version = version; | ||
| 166 | } | ||
| 167 | |||
| 168 | void TitleMetadata::SetSystemVersion(u64 version) { | ||
| 169 | tmd_body.system_version = version; | ||
| 170 | } | ||
| 171 | |||
| 172 | void TitleMetadata::AddContentChunk(const ContentChunk& chunk) { | ||
| 173 | tmd_chunks.push_back(chunk); | ||
| 174 | } | ||
| 175 | |||
| 176 | void TitleMetadata::Print() const { | ||
| 177 | LOG_DEBUG(Service_FS, "%s - %u chunks", filepath.c_str(), | ||
| 178 | static_cast<u32>(tmd_body.content_count)); | ||
| 179 | |||
| 180 | // Content info describes ranges of content chunks | ||
| 181 | LOG_DEBUG(Service_FS, "Content info:"); | ||
| 182 | for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) { | ||
| 183 | if (tmd_body.contentinfo[i].command_count == 0) | ||
| 184 | break; | ||
| 185 | |||
| 186 | LOG_DEBUG(Service_FS, " Index %04X, Command Count %04X", | ||
| 187 | static_cast<u32>(tmd_body.contentinfo[i].index), | ||
| 188 | static_cast<u32>(tmd_body.contentinfo[i].command_count)); | ||
| 189 | } | ||
| 190 | |||
| 191 | // For each content info, print their content chunk range | ||
| 192 | for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) { | ||
| 193 | u16 index = static_cast<u16>(tmd_body.contentinfo[i].index); | ||
| 194 | u16 count = static_cast<u16>(tmd_body.contentinfo[i].command_count); | ||
| 195 | |||
| 196 | if (count == 0) | ||
| 197 | continue; | ||
| 198 | |||
| 199 | LOG_DEBUG(Service_FS, "Content chunks for content info index %zu:", i); | ||
| 200 | for (u16 j = index; j < index + count; j++) { | ||
| 201 | // Don't attempt to print content we don't have | ||
| 202 | if (j > tmd_body.content_count) | ||
| 203 | break; | ||
| 204 | |||
| 205 | const ContentChunk& chunk = tmd_chunks[j]; | ||
| 206 | LOG_DEBUG(Service_FS, " ID %08X, Index %04X, Type %04x, Size %016" PRIX64, | ||
| 207 | static_cast<u32>(chunk.id), static_cast<u32>(chunk.index), | ||
| 208 | static_cast<u32>(chunk.type), static_cast<u64>(chunk.size)); | ||
| 209 | } | ||
| 210 | } | ||
| 211 | } | ||
| 212 | } // namespace FileSys | ||
diff --git a/src/core/file_sys/title_metadata.h b/src/core/file_sys/title_metadata.h new file mode 100644 index 000000000..1fc157bf3 --- /dev/null +++ b/src/core/file_sys/title_metadata.h | |||
| @@ -0,0 +1,125 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <string> | ||
| 8 | #include <vector> | ||
| 9 | #include "common/common_types.h" | ||
| 10 | #include "common/swap.h" | ||
| 11 | |||
| 12 | namespace Loader { | ||
| 13 | enum class ResultStatus; | ||
| 14 | } | ||
| 15 | |||
| 16 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 17 | // FileSys namespace | ||
| 18 | |||
| 19 | namespace FileSys { | ||
| 20 | |||
| 21 | enum TMDSignatureType : u32 { | ||
| 22 | Rsa4096Sha1 = 0x10000, | ||
| 23 | Rsa2048Sha1 = 0x10001, | ||
| 24 | EllipticSha1 = 0x10002, | ||
| 25 | Rsa4096Sha256 = 0x10003, | ||
| 26 | Rsa2048Sha256 = 0x10004, | ||
| 27 | EcdsaSha256 = 0x10005 | ||
| 28 | }; | ||
| 29 | |||
| 30 | enum TMDContentTypeFlag : u16 { | ||
| 31 | Encrypted = 1 << 1, | ||
| 32 | Disc = 1 << 2, | ||
| 33 | CFM = 1 << 3, | ||
| 34 | Optional = 1 << 14, | ||
| 35 | Shared = 1 << 15 | ||
| 36 | }; | ||
| 37 | |||
| 38 | /** | ||
| 39 | * Helper which implements an interface to read and write Title Metadata (TMD) files. | ||
| 40 | * If a file path is provided and the file exists, it can be parsed and used, otherwise | ||
| 41 | * it must be created. The TMD file can then be interpreted, modified and/or saved. | ||
| 42 | */ | ||
| 43 | class TitleMetadata { | ||
| 44 | public: | ||
| 45 | struct ContentChunk { | ||
| 46 | u32_be id; | ||
| 47 | u16_be index; | ||
| 48 | u16_be type; | ||
| 49 | u64_be size; | ||
| 50 | std::array<u8, 0x20> hash; | ||
| 51 | }; | ||
| 52 | |||
| 53 | static_assert(sizeof(ContentChunk) == 0x30, "TMD ContentChunk structure size is wrong"); | ||
| 54 | |||
| 55 | struct ContentInfo { | ||
| 56 | u16_be index; | ||
| 57 | u16_be command_count; | ||
| 58 | std::array<u8, 0x20> hash; | ||
| 59 | }; | ||
| 60 | |||
| 61 | static_assert(sizeof(ContentInfo) == 0x24, "TMD ContentInfo structure size is wrong"); | ||
| 62 | |||
| 63 | #pragma pack(push, 1) | ||
| 64 | |||
| 65 | struct Body { | ||
| 66 | std::array<u8, 0x40> issuer; | ||
| 67 | u8 version; | ||
| 68 | u8 ca_crl_version; | ||
| 69 | u8 signer_crl_version; | ||
| 70 | u8 reserved; | ||
| 71 | u64_be system_version; | ||
| 72 | u64_be title_id; | ||
| 73 | u32_be title_type; | ||
| 74 | u16_be group_id; | ||
| 75 | u32_be savedata_size; | ||
| 76 | u32_be srl_private_savedata_size; | ||
| 77 | std::array<u8, 4> reserved_2; | ||
| 78 | u8 srl_flag; | ||
| 79 | std::array<u8, 0x31> reserved_3; | ||
| 80 | u32_be access_rights; | ||
| 81 | u16_be title_version; | ||
| 82 | u16_be content_count; | ||
| 83 | u16_be boot_content; | ||
| 84 | std::array<u8, 2> reserved_4; | ||
| 85 | std::array<u8, 0x20> contentinfo_hash; | ||
| 86 | std::array<ContentInfo, 64> contentinfo; | ||
| 87 | }; | ||
| 88 | |||
| 89 | static_assert(sizeof(Body) == 0x9C4, "TMD body structure size is wrong"); | ||
| 90 | |||
| 91 | #pragma pack(pop) | ||
| 92 | |||
| 93 | explicit TitleMetadata(std::string& path) : filepath(std::move(path)) {} | ||
| 94 | Loader::ResultStatus Load(); | ||
| 95 | Loader::ResultStatus Save(); | ||
| 96 | |||
| 97 | u64 GetTitleID() const; | ||
| 98 | u32 GetTitleType() const; | ||
| 99 | u16 GetTitleVersion() const; | ||
| 100 | u64 GetSystemVersion() const; | ||
| 101 | size_t GetContentCount() const; | ||
| 102 | u32 GetBootContentID() const; | ||
| 103 | u32 GetManualContentID() const; | ||
| 104 | u32 GetDLPContentID() const; | ||
| 105 | |||
| 106 | void SetTitleID(u64 title_id); | ||
| 107 | void SetTitleType(u32 type); | ||
| 108 | void SetTitleVersion(u16 version); | ||
| 109 | void SetSystemVersion(u64 version); | ||
| 110 | void AddContentChunk(const ContentChunk& chunk); | ||
| 111 | |||
| 112 | void Print() const; | ||
| 113 | |||
| 114 | private: | ||
| 115 | enum TMDContentIndex { Main = 0, Manual = 1, DLP = 2 }; | ||
| 116 | |||
| 117 | Body tmd_body; | ||
| 118 | u32_be signature_type; | ||
| 119 | std::vector<u8> tmd_signature; | ||
| 120 | std::vector<ContentChunk> tmd_chunks; | ||
| 121 | |||
| 122 | std::string filepath; | ||
| 123 | }; | ||
| 124 | |||
| 125 | } // namespace FileSys | ||
diff --git a/src/core/frontend/emu_window.cpp b/src/core/frontend/emu_window.cpp index 4f7d54a33..e67394177 100644 --- a/src/core/frontend/emu_window.cpp +++ b/src/core/frontend/emu_window.cpp | |||
| @@ -2,14 +2,55 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <algorithm> | ||
| 6 | #include <cmath> | 5 | #include <cmath> |
| 7 | #include "common/assert.h" | 6 | #include <mutex> |
| 8 | #include "core/3ds.h" | ||
| 9 | #include "core/core.h" | ||
| 10 | #include "core/frontend/emu_window.h" | 7 | #include "core/frontend/emu_window.h" |
| 8 | #include "core/frontend/input.h" | ||
| 11 | #include "core/settings.h" | 9 | #include "core/settings.h" |
| 12 | 10 | ||
| 11 | class EmuWindow::TouchState : public Input::Factory<Input::TouchDevice>, | ||
| 12 | public std::enable_shared_from_this<TouchState> { | ||
| 13 | public: | ||
| 14 | std::unique_ptr<Input::TouchDevice> Create(const Common::ParamPackage&) override { | ||
| 15 | return std::make_unique<Device>(shared_from_this()); | ||
| 16 | } | ||
| 17 | |||
| 18 | std::mutex mutex; | ||
| 19 | |||
| 20 | bool touch_pressed = false; ///< True if touchpad area is currently pressed, otherwise false | ||
| 21 | |||
| 22 | float touch_x = 0.0f; ///< Touchpad X-position | ||
| 23 | float touch_y = 0.0f; ///< Touchpad Y-position | ||
| 24 | |||
| 25 | private: | ||
| 26 | class Device : public Input::TouchDevice { | ||
| 27 | public: | ||
| 28 | explicit Device(std::weak_ptr<TouchState>&& touch_state) : touch_state(touch_state) {} | ||
| 29 | std::tuple<float, float, bool> GetStatus() const override { | ||
| 30 | if (auto state = touch_state.lock()) { | ||
| 31 | std::lock_guard<std::mutex> guard(state->mutex); | ||
| 32 | return std::make_tuple(state->touch_x, state->touch_y, state->touch_pressed); | ||
| 33 | } | ||
| 34 | return std::make_tuple(0.0f, 0.0f, false); | ||
| 35 | } | ||
| 36 | |||
| 37 | private: | ||
| 38 | std::weak_ptr<TouchState> touch_state; | ||
| 39 | }; | ||
| 40 | }; | ||
| 41 | |||
| 42 | EmuWindow::EmuWindow() { | ||
| 43 | // TODO: Find a better place to set this. | ||
| 44 | config.min_client_area_size = std::make_pair(400u, 480u); | ||
| 45 | active_config = config; | ||
| 46 | touch_state = std::make_shared<TouchState>(); | ||
| 47 | Input::RegisterFactory<Input::TouchDevice>("emu_window", touch_state); | ||
| 48 | } | ||
| 49 | |||
| 50 | EmuWindow::~EmuWindow() { | ||
| 51 | Input::UnregisterFactory<Input::TouchDevice>("emu_window"); | ||
| 52 | } | ||
| 53 | |||
| 13 | /** | 54 | /** |
| 14 | * Check if the given x/y coordinates are within the touchpad specified by the framebuffer layout | 55 | * Check if the given x/y coordinates are within the touchpad specified by the framebuffer layout |
| 15 | * @param layout FramebufferLayout object describing the framebuffer size and screen positions | 56 | * @param layout FramebufferLayout object describing the framebuffer size and screen positions |
| @@ -38,22 +79,26 @@ void EmuWindow::TouchPressed(unsigned framebuffer_x, unsigned framebuffer_y) { | |||
| 38 | if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) | 79 | if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) |
| 39 | return; | 80 | return; |
| 40 | 81 | ||
| 41 | touch_x = Core::kScreenBottomWidth * (framebuffer_x - framebuffer_layout.bottom_screen.left) / | 82 | std::lock_guard<std::mutex> guard(touch_state->mutex); |
| 42 | (framebuffer_layout.bottom_screen.right - framebuffer_layout.bottom_screen.left); | 83 | touch_state->touch_x = |
| 43 | touch_y = Core::kScreenBottomHeight * (framebuffer_y - framebuffer_layout.bottom_screen.top) / | 84 | static_cast<float>(framebuffer_x - framebuffer_layout.bottom_screen.left) / |
| 44 | (framebuffer_layout.bottom_screen.bottom - framebuffer_layout.bottom_screen.top); | 85 | (framebuffer_layout.bottom_screen.right - framebuffer_layout.bottom_screen.left); |
| 86 | touch_state->touch_y = | ||
| 87 | static_cast<float>(framebuffer_y - framebuffer_layout.bottom_screen.top) / | ||
| 88 | (framebuffer_layout.bottom_screen.bottom - framebuffer_layout.bottom_screen.top); | ||
| 45 | 89 | ||
| 46 | touch_pressed = true; | 90 | touch_state->touch_pressed = true; |
| 47 | } | 91 | } |
| 48 | 92 | ||
| 49 | void EmuWindow::TouchReleased() { | 93 | void EmuWindow::TouchReleased() { |
| 50 | touch_pressed = false; | 94 | std::lock_guard<std::mutex> guard(touch_state->mutex); |
| 51 | touch_x = 0; | 95 | touch_state->touch_pressed = false; |
| 52 | touch_y = 0; | 96 | touch_state->touch_x = 0; |
| 97 | touch_state->touch_y = 0; | ||
| 53 | } | 98 | } |
| 54 | 99 | ||
| 55 | void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) { | 100 | void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) { |
| 56 | if (!touch_pressed) | 101 | if (!touch_state->touch_pressed) |
| 57 | return; | 102 | return; |
| 58 | 103 | ||
| 59 | if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) | 104 | if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) |
| @@ -62,29 +107,6 @@ void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) { | |||
| 62 | TouchPressed(framebuffer_x, framebuffer_y); | 107 | TouchPressed(framebuffer_x, framebuffer_y); |
| 63 | } | 108 | } |
| 64 | 109 | ||
| 65 | void EmuWindow::AccelerometerChanged(float x, float y, float z) { | ||
| 66 | constexpr float coef = 512; | ||
| 67 | |||
| 68 | std::lock_guard<std::mutex> lock(accel_mutex); | ||
| 69 | |||
| 70 | // TODO(wwylele): do a time stretch as it in GyroscopeChanged | ||
| 71 | // The time stretch formula should be like | ||
| 72 | // stretched_vector = (raw_vector - gravity) * stretch_ratio + gravity | ||
| 73 | accel_x = static_cast<s16>(x * coef); | ||
| 74 | accel_y = static_cast<s16>(y * coef); | ||
| 75 | accel_z = static_cast<s16>(z * coef); | ||
| 76 | } | ||
| 77 | |||
| 78 | void EmuWindow::GyroscopeChanged(float x, float y, float z) { | ||
| 79 | constexpr float FULL_FPS = 60; | ||
| 80 | float coef = GetGyroscopeRawToDpsCoefficient(); | ||
| 81 | float stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale(); | ||
| 82 | std::lock_guard<std::mutex> lock(gyro_mutex); | ||
| 83 | gyro_x = static_cast<s16>(x * coef * stretch); | ||
| 84 | gyro_y = static_cast<s16>(y * coef * stretch); | ||
| 85 | gyro_z = static_cast<s16>(z * coef * stretch); | ||
| 86 | } | ||
| 87 | |||
| 88 | void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height) { | 110 | void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height) { |
| 89 | Layout::FramebufferLayout layout; | 111 | Layout::FramebufferLayout layout; |
| 90 | if (Settings::values.custom_layout == true) { | 112 | if (Settings::values.custom_layout == true) { |
| @@ -97,6 +119,9 @@ void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height) | |||
| 97 | case Settings::LayoutOption::LargeScreen: | 119 | case Settings::LayoutOption::LargeScreen: |
| 98 | layout = Layout::LargeFrameLayout(width, height, Settings::values.swap_screen); | 120 | layout = Layout::LargeFrameLayout(width, height, Settings::values.swap_screen); |
| 99 | break; | 121 | break; |
| 122 | case Settings::LayoutOption::SideScreen: | ||
| 123 | layout = Layout::SideFrameLayout(width, height, Settings::values.swap_screen); | ||
| 124 | break; | ||
| 100 | case Settings::LayoutOption::Default: | 125 | case Settings::LayoutOption::Default: |
| 101 | default: | 126 | default: |
| 102 | layout = Layout::DefaultFrameLayout(width, height, Settings::values.swap_screen); | 127 | layout = Layout::DefaultFrameLayout(width, height, Settings::values.swap_screen); |
diff --git a/src/core/frontend/emu_window.h b/src/core/frontend/emu_window.h index 9414123a4..c10dee51b 100644 --- a/src/core/frontend/emu_window.h +++ b/src/core/frontend/emu_window.h | |||
| @@ -4,11 +4,10 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <mutex> | 7 | #include <memory> |
| 8 | #include <tuple> | 8 | #include <tuple> |
| 9 | #include <utility> | 9 | #include <utility> |
| 10 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 11 | #include "common/math_util.h" | ||
| 12 | #include "core/frontend/framebuffer_layout.h" | 11 | #include "core/frontend/framebuffer_layout.h" |
| 13 | 12 | ||
| 14 | /** | 13 | /** |
| @@ -69,84 +68,6 @@ public: | |||
| 69 | void TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y); | 68 | void TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y); |
| 70 | 69 | ||
| 71 | /** | 70 | /** |
| 72 | * Signal accelerometer state has changed. | ||
| 73 | * @param x X-axis accelerometer value | ||
| 74 | * @param y Y-axis accelerometer value | ||
| 75 | * @param z Z-axis accelerometer value | ||
| 76 | * @note all values are in unit of g (gravitational acceleration). | ||
| 77 | * e.g. x = 1.0 means 9.8m/s^2 in x direction. | ||
| 78 | * @see GetAccelerometerState for axis explanation. | ||
| 79 | */ | ||
| 80 | void AccelerometerChanged(float x, float y, float z); | ||
| 81 | |||
| 82 | /** | ||
| 83 | * Signal gyroscope state has changed. | ||
| 84 | * @param x X-axis accelerometer value | ||
| 85 | * @param y Y-axis accelerometer value | ||
| 86 | * @param z Z-axis accelerometer value | ||
| 87 | * @note all values are in deg/sec. | ||
| 88 | * @see GetGyroscopeState for axis explanation. | ||
| 89 | */ | ||
| 90 | void GyroscopeChanged(float x, float y, float z); | ||
| 91 | |||
| 92 | /** | ||
| 93 | * Gets the current touch screen state (touch X/Y coordinates and whether or not it is pressed). | ||
| 94 | * @note This should be called by the core emu thread to get a state set by the window thread. | ||
| 95 | * @todo Fix this function to be thread-safe. | ||
| 96 | * @return std::tuple of (x, y, pressed) where `x` and `y` are the touch coordinates and | ||
| 97 | * `pressed` is true if the touch screen is currently being pressed | ||
| 98 | */ | ||
| 99 | std::tuple<u16, u16, bool> GetTouchState() const { | ||
| 100 | return std::make_tuple(touch_x, touch_y, touch_pressed); | ||
| 101 | } | ||
| 102 | |||
| 103 | /** | ||
| 104 | * Gets the current accelerometer state (acceleration along each three axis). | ||
| 105 | * Axis explained: | ||
| 106 | * +x is the same direction as LEFT on D-pad. | ||
| 107 | * +y is normal to the touch screen, pointing outward. | ||
| 108 | * +z is the same direction as UP on D-pad. | ||
| 109 | * Units: | ||
| 110 | * 1 unit of return value = 1/512 g (measured by hw test), | ||
| 111 | * where g is the gravitational acceleration (9.8 m/sec2). | ||
| 112 | * @note This should be called by the core emu thread to get a state set by the window thread. | ||
| 113 | * @return std::tuple of (x, y, z) | ||
| 114 | */ | ||
| 115 | std::tuple<s16, s16, s16> GetAccelerometerState() { | ||
| 116 | std::lock_guard<std::mutex> lock(accel_mutex); | ||
| 117 | return std::make_tuple(accel_x, accel_y, accel_z); | ||
| 118 | } | ||
| 119 | |||
| 120 | /** | ||
| 121 | * Gets the current gyroscope state (angular rates about each three axis). | ||
| 122 | * Axis explained: | ||
| 123 | * +x is the same direction as LEFT on D-pad. | ||
| 124 | * +y is normal to the touch screen, pointing outward. | ||
| 125 | * +z is the same direction as UP on D-pad. | ||
| 126 | * Orientation is determined by right-hand rule. | ||
| 127 | * Units: | ||
| 128 | * 1 unit of return value = (1/coef) deg/sec, | ||
| 129 | * where coef is the return value of GetGyroscopeRawToDpsCoefficient(). | ||
| 130 | * @note This should be called by the core emu thread to get a state set by the window thread. | ||
| 131 | * @return std::tuple of (x, y, z) | ||
| 132 | */ | ||
| 133 | std::tuple<s16, s16, s16> GetGyroscopeState() { | ||
| 134 | std::lock_guard<std::mutex> lock(gyro_mutex); | ||
| 135 | return std::make_tuple(gyro_x, gyro_y, gyro_z); | ||
| 136 | } | ||
| 137 | |||
| 138 | /** | ||
| 139 | * Gets the coefficient for units conversion of gyroscope state. | ||
| 140 | * The conversion formula is r = coefficient * v, | ||
| 141 | * where v is angular rate in deg/sec, | ||
| 142 | * and r is the gyroscope state. | ||
| 143 | * @return float-type coefficient | ||
| 144 | */ | ||
| 145 | f32 GetGyroscopeRawToDpsCoefficient() const { | ||
| 146 | return 14.375f; // taken from hw test, and gyroscope's document | ||
| 147 | } | ||
| 148 | |||
| 149 | /** | ||
| 150 | * Returns currently active configuration. | 71 | * Returns currently active configuration. |
| 151 | * @note Accesses to the returned object need not be consistent because it may be modified in | 72 | * @note Accesses to the returned object need not be consistent because it may be modified in |
| 152 | * another thread | 73 | * another thread |
| @@ -180,21 +101,8 @@ public: | |||
| 180 | void UpdateCurrentFramebufferLayout(unsigned width, unsigned height); | 101 | void UpdateCurrentFramebufferLayout(unsigned width, unsigned height); |
| 181 | 102 | ||
| 182 | protected: | 103 | protected: |
| 183 | EmuWindow() { | 104 | EmuWindow(); |
| 184 | // TODO: Find a better place to set this. | 105 | virtual ~EmuWindow(); |
| 185 | config.min_client_area_size = std::make_pair(400u, 480u); | ||
| 186 | active_config = config; | ||
| 187 | touch_x = 0; | ||
| 188 | touch_y = 0; | ||
| 189 | touch_pressed = false; | ||
| 190 | accel_x = 0; | ||
| 191 | accel_y = -512; | ||
| 192 | accel_z = 0; | ||
| 193 | gyro_x = 0; | ||
| 194 | gyro_y = 0; | ||
| 195 | gyro_z = 0; | ||
| 196 | } | ||
| 197 | virtual ~EmuWindow() {} | ||
| 198 | 106 | ||
| 199 | /** | 107 | /** |
| 200 | * Processes any pending configuration changes from the last SetConfig call. | 108 | * Processes any pending configuration changes from the last SetConfig call. |
| @@ -250,20 +158,8 @@ private: | |||
| 250 | /// ProcessConfigurationChanges) | 158 | /// ProcessConfigurationChanges) |
| 251 | WindowConfig active_config; ///< Internal active configuration | 159 | WindowConfig active_config; ///< Internal active configuration |
| 252 | 160 | ||
| 253 | bool touch_pressed; ///< True if touchpad area is currently pressed, otherwise false | 161 | class TouchState; |
| 254 | 162 | std::shared_ptr<TouchState> touch_state; | |
| 255 | u16 touch_x; ///< Touchpad X-position in native 3DS pixel coordinates (0-320) | ||
| 256 | u16 touch_y; ///< Touchpad Y-position in native 3DS pixel coordinates (0-240) | ||
| 257 | |||
| 258 | std::mutex accel_mutex; | ||
| 259 | s16 accel_x; ///< Accelerometer X-axis value in native 3DS units | ||
| 260 | s16 accel_y; ///< Accelerometer Y-axis value in native 3DS units | ||
| 261 | s16 accel_z; ///< Accelerometer Z-axis value in native 3DS units | ||
| 262 | |||
| 263 | std::mutex gyro_mutex; | ||
| 264 | s16 gyro_x; ///< Gyroscope X-axis value in native 3DS units | ||
| 265 | s16 gyro_y; ///< Gyroscope Y-axis value in native 3DS units | ||
| 266 | s16 gyro_z; ///< Gyroscope Z-axis value in native 3DS units | ||
| 267 | 163 | ||
| 268 | /** | 164 | /** |
| 269 | * Clip the provided coordinates to be inside the touchscreen area. | 165 | * Clip the provided coordinates to be inside the touchscreen area. |
diff --git a/src/core/frontend/framebuffer_layout.cpp b/src/core/frontend/framebuffer_layout.cpp index d2d02f9ff..e9f778fcb 100644 --- a/src/core/frontend/framebuffer_layout.cpp +++ b/src/core/frontend/framebuffer_layout.cpp | |||
| @@ -141,6 +141,40 @@ FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool swapped | |||
| 141 | return res; | 141 | return res; |
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | FramebufferLayout SideFrameLayout(unsigned width, unsigned height, bool swapped) { | ||
| 145 | ASSERT(width > 0); | ||
| 146 | ASSERT(height > 0); | ||
| 147 | |||
| 148 | FramebufferLayout res{width, height, true, true, {}, {}}; | ||
| 149 | // Aspect ratio of both screens side by side | ||
| 150 | const float emulation_aspect_ratio = static_cast<float>(Core::kScreenTopHeight) / | ||
| 151 | (Core::kScreenTopWidth + Core::kScreenBottomWidth); | ||
| 152 | float window_aspect_ratio = static_cast<float>(height) / width; | ||
| 153 | MathUtil::Rectangle<unsigned> screen_window_area{0, 0, width, height}; | ||
| 154 | // Find largest Rectangle that can fit in the window size with the given aspect ratio | ||
| 155 | MathUtil::Rectangle<unsigned> screen_rect = | ||
| 156 | maxRectangle(screen_window_area, emulation_aspect_ratio); | ||
| 157 | // Find sizes of top and bottom screen | ||
| 158 | MathUtil::Rectangle<unsigned> top_screen = maxRectangle(screen_rect, TOP_SCREEN_ASPECT_RATIO); | ||
| 159 | MathUtil::Rectangle<unsigned> bot_screen = maxRectangle(screen_rect, BOT_SCREEN_ASPECT_RATIO); | ||
| 160 | |||
| 161 | if (window_aspect_ratio < emulation_aspect_ratio) { | ||
| 162 | // Apply borders to the left and right sides of the window. | ||
| 163 | u32 shift_horizontal = (screen_window_area.GetWidth() - screen_rect.GetWidth()) / 2; | ||
| 164 | top_screen = top_screen.TranslateX(shift_horizontal); | ||
| 165 | bot_screen = bot_screen.TranslateX(shift_horizontal); | ||
| 166 | } else { | ||
| 167 | // Window is narrower than the emulation content => apply borders to the top and bottom | ||
| 168 | u32 shift_vertical = (screen_window_area.GetHeight() - screen_rect.GetHeight()) / 2; | ||
| 169 | top_screen = top_screen.TranslateY(shift_vertical); | ||
| 170 | bot_screen = bot_screen.TranslateY(shift_vertical); | ||
| 171 | } | ||
| 172 | // Move the top screen to the right if we are swapped. | ||
| 173 | res.top_screen = swapped ? top_screen.TranslateX(bot_screen.GetWidth()) : top_screen; | ||
| 174 | res.bottom_screen = swapped ? bot_screen : bot_screen.TranslateX(top_screen.GetWidth()); | ||
| 175 | return res; | ||
| 176 | } | ||
| 177 | |||
| 144 | FramebufferLayout CustomFrameLayout(unsigned width, unsigned height) { | 178 | FramebufferLayout CustomFrameLayout(unsigned width, unsigned height) { |
| 145 | ASSERT(width > 0); | 179 | ASSERT(width > 0); |
| 146 | ASSERT(height > 0); | 180 | ASSERT(height > 0); |
| @@ -158,4 +192,4 @@ FramebufferLayout CustomFrameLayout(unsigned width, unsigned height) { | |||
| 158 | res.bottom_screen = bot_screen; | 192 | res.bottom_screen = bot_screen; |
| 159 | return res; | 193 | return res; |
| 160 | } | 194 | } |
| 161 | } | 195 | } // namespace Layout |
diff --git a/src/core/frontend/framebuffer_layout.h b/src/core/frontend/framebuffer_layout.h index 9a7738969..4983cf103 100644 --- a/src/core/frontend/framebuffer_layout.h +++ b/src/core/frontend/framebuffer_layout.h | |||
| @@ -54,6 +54,17 @@ FramebufferLayout SingleFrameLayout(unsigned width, unsigned height, bool is_swa | |||
| 54 | FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool is_swapped); | 54 | FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool is_swapped); |
| 55 | 55 | ||
| 56 | /** | 56 | /** |
| 57 | * Factory method for constructing a Frame with the Top screen and bottom | ||
| 58 | * screen side by side | ||
| 59 | * This is useful for devices with small screens, like the GPDWin | ||
| 60 | * @param width Window framebuffer width in pixels | ||
| 61 | * @param height Window framebuffer height in pixels | ||
| 62 | * @param is_swapped if true, the bottom screen will be the left display | ||
| 63 | * @return Newly created FramebufferLayout object with default screen regions initialized | ||
| 64 | */ | ||
| 65 | FramebufferLayout SideFrameLayout(unsigned width, unsigned height, bool is_swapped); | ||
| 66 | |||
| 67 | /** | ||
| 57 | * Factory method for constructing a custom FramebufferLayout | 68 | * Factory method for constructing a custom FramebufferLayout |
| 58 | * @param width Window framebuffer width in pixels | 69 | * @param width Window framebuffer width in pixels |
| 59 | * @param height Window framebuffer height in pixels | 70 | * @param height Window framebuffer height in pixels |
diff --git a/src/core/frontend/input.h b/src/core/frontend/input.h index 0a5713dc0..8c256beb5 100644 --- a/src/core/frontend/input.h +++ b/src/core/frontend/input.h | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include <utility> | 11 | #include <utility> |
| 12 | #include "common/logging/log.h" | 12 | #include "common/logging/log.h" |
| 13 | #include "common/param_package.h" | 13 | #include "common/param_package.h" |
| 14 | #include "common/vector_math.h" | ||
| 14 | 15 | ||
| 15 | namespace Input { | 16 | namespace Input { |
| 16 | 17 | ||
| @@ -107,4 +108,28 @@ using ButtonDevice = InputDevice<bool>; | |||
| 107 | */ | 108 | */ |
| 108 | using AnalogDevice = InputDevice<std::tuple<float, float>>; | 109 | using AnalogDevice = InputDevice<std::tuple<float, float>>; |
| 109 | 110 | ||
| 111 | /** | ||
| 112 | * A motion device is an input device that returns a tuple of accelerometer state vector and | ||
| 113 | * gyroscope state vector. | ||
| 114 | * | ||
| 115 | * For both vectors: | ||
| 116 | * x+ is the same direction as LEFT on D-pad. | ||
| 117 | * y+ is normal to the touch screen, pointing outward. | ||
| 118 | * z+ is the same direction as UP on D-pad. | ||
| 119 | * | ||
| 120 | * For accelerometer state vector | ||
| 121 | * Units: g (gravitational acceleration) | ||
| 122 | * | ||
| 123 | * For gyroscope state vector: | ||
| 124 | * Orientation is determined by right-hand rule. | ||
| 125 | * Units: deg/sec | ||
| 126 | */ | ||
| 127 | using MotionDevice = InputDevice<std::tuple<Math::Vec3<float>, Math::Vec3<float>>>; | ||
| 128 | |||
| 129 | /** | ||
| 130 | * A touch device is an input device that returns a tuple of two floats and a bool. The floats are | ||
| 131 | * x and y coordinates in the range 0.0 - 1.0, and the bool indicates whether it is pressed. | ||
| 132 | */ | ||
| 133 | using TouchDevice = InputDevice<std::tuple<float, float, bool>>; | ||
| 134 | |||
| 110 | } // namespace Input | 135 | } // namespace Input |
diff --git a/src/core/frontend/motion_emu.cpp b/src/core/frontend/motion_emu.cpp deleted file mode 100644 index 9a5b3185d..000000000 --- a/src/core/frontend/motion_emu.cpp +++ /dev/null | |||
| @@ -1,89 +0,0 @@ | |||
| 1 | // Copyright 2016 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "common/math_util.h" | ||
| 6 | #include "common/quaternion.h" | ||
| 7 | #include "core/frontend/emu_window.h" | ||
| 8 | #include "core/frontend/motion_emu.h" | ||
| 9 | |||
| 10 | namespace Motion { | ||
| 11 | |||
| 12 | static constexpr int update_millisecond = 100; | ||
| 13 | static constexpr auto update_duration = | ||
| 14 | std::chrono::duration_cast<std::chrono::steady_clock::duration>( | ||
| 15 | std::chrono::milliseconds(update_millisecond)); | ||
| 16 | |||
| 17 | MotionEmu::MotionEmu(EmuWindow& emu_window) | ||
| 18 | : motion_emu_thread(&MotionEmu::MotionEmuThread, this, std::ref(emu_window)) {} | ||
| 19 | |||
| 20 | MotionEmu::~MotionEmu() { | ||
| 21 | if (motion_emu_thread.joinable()) { | ||
| 22 | shutdown_event.Set(); | ||
| 23 | motion_emu_thread.join(); | ||
| 24 | } | ||
| 25 | } | ||
| 26 | |||
| 27 | void MotionEmu::MotionEmuThread(EmuWindow& emu_window) { | ||
| 28 | auto update_time = std::chrono::steady_clock::now(); | ||
| 29 | Math::Quaternion<float> q = MakeQuaternion(Math::Vec3<float>(), 0); | ||
| 30 | Math::Quaternion<float> old_q; | ||
| 31 | |||
| 32 | while (!shutdown_event.WaitUntil(update_time)) { | ||
| 33 | update_time += update_duration; | ||
| 34 | old_q = q; | ||
| 35 | |||
| 36 | { | ||
| 37 | std::lock_guard<std::mutex> guard(tilt_mutex); | ||
| 38 | |||
| 39 | // Find the quaternion describing current 3DS tilting | ||
| 40 | q = MakeQuaternion(Math::MakeVec(-tilt_direction.y, 0.0f, tilt_direction.x), | ||
| 41 | tilt_angle); | ||
| 42 | } | ||
| 43 | |||
| 44 | auto inv_q = q.Inverse(); | ||
| 45 | |||
| 46 | // Set the gravity vector in world space | ||
| 47 | auto gravity = Math::MakeVec(0.0f, -1.0f, 0.0f); | ||
| 48 | |||
| 49 | // Find the angular rate vector in world space | ||
| 50 | auto angular_rate = ((q - old_q) * inv_q).xyz * 2; | ||
| 51 | angular_rate *= 1000 / update_millisecond / MathUtil::PI * 180; | ||
| 52 | |||
| 53 | // Transform the two vectors from world space to 3DS space | ||
| 54 | gravity = QuaternionRotate(inv_q, gravity); | ||
| 55 | angular_rate = QuaternionRotate(inv_q, angular_rate); | ||
| 56 | |||
| 57 | // Update the sensor state | ||
| 58 | emu_window.AccelerometerChanged(gravity.x, gravity.y, gravity.z); | ||
| 59 | emu_window.GyroscopeChanged(angular_rate.x, angular_rate.y, angular_rate.z); | ||
| 60 | } | ||
| 61 | } | ||
| 62 | |||
| 63 | void MotionEmu::BeginTilt(int x, int y) { | ||
| 64 | mouse_origin = Math::MakeVec(x, y); | ||
| 65 | is_tilting = true; | ||
| 66 | } | ||
| 67 | |||
| 68 | void MotionEmu::Tilt(int x, int y) { | ||
| 69 | constexpr float SENSITIVITY = 0.01f; | ||
| 70 | auto mouse_move = Math::MakeVec(x, y) - mouse_origin; | ||
| 71 | if (is_tilting) { | ||
| 72 | std::lock_guard<std::mutex> guard(tilt_mutex); | ||
| 73 | if (mouse_move.x == 0 && mouse_move.y == 0) { | ||
| 74 | tilt_angle = 0; | ||
| 75 | } else { | ||
| 76 | tilt_direction = mouse_move.Cast<float>(); | ||
| 77 | tilt_angle = MathUtil::Clamp(tilt_direction.Normalize() * SENSITIVITY, 0.0f, | ||
| 78 | MathUtil::PI * 0.5f); | ||
| 79 | } | ||
| 80 | } | ||
| 81 | } | ||
| 82 | |||
| 83 | void MotionEmu::EndTilt() { | ||
| 84 | std::lock_guard<std::mutex> guard(tilt_mutex); | ||
| 85 | tilt_angle = 0; | ||
| 86 | is_tilting = false; | ||
| 87 | } | ||
| 88 | |||
| 89 | } // namespace Motion | ||
diff --git a/src/core/frontend/motion_emu.h b/src/core/frontend/motion_emu.h deleted file mode 100644 index 99d41a726..000000000 --- a/src/core/frontend/motion_emu.h +++ /dev/null | |||
| @@ -1,52 +0,0 @@ | |||
| 1 | // Copyright 2016 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | #include "common/thread.h" | ||
| 7 | #include "common/vector_math.h" | ||
| 8 | |||
| 9 | class EmuWindow; | ||
| 10 | |||
| 11 | namespace Motion { | ||
| 12 | |||
| 13 | class MotionEmu final { | ||
| 14 | public: | ||
| 15 | MotionEmu(EmuWindow& emu_window); | ||
| 16 | ~MotionEmu(); | ||
| 17 | |||
| 18 | /** | ||
| 19 | * Signals that a motion sensor tilt has begun. | ||
| 20 | * @param x the x-coordinate of the cursor | ||
| 21 | * @param y the y-coordinate of the cursor | ||
| 22 | */ | ||
| 23 | void BeginTilt(int x, int y); | ||
| 24 | |||
| 25 | /** | ||
| 26 | * Signals that a motion sensor tilt is occurring. | ||
| 27 | * @param x the x-coordinate of the cursor | ||
| 28 | * @param y the y-coordinate of the cursor | ||
| 29 | */ | ||
| 30 | void Tilt(int x, int y); | ||
| 31 | |||
| 32 | /** | ||
| 33 | * Signals that a motion sensor tilt has ended. | ||
| 34 | */ | ||
| 35 | void EndTilt(); | ||
| 36 | |||
| 37 | private: | ||
| 38 | Math::Vec2<int> mouse_origin; | ||
| 39 | |||
| 40 | std::mutex tilt_mutex; | ||
| 41 | Math::Vec2<float> tilt_direction; | ||
| 42 | float tilt_angle = 0; | ||
| 43 | |||
| 44 | bool is_tilting = false; | ||
| 45 | |||
| 46 | Common::Event shutdown_event; | ||
| 47 | std::thread motion_emu_thread; | ||
| 48 | |||
| 49 | void MotionEmuThread(EmuWindow& emu_window); | ||
| 50 | }; | ||
| 51 | |||
| 52 | } // namespace Motion | ||
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp index 123fe7cd4..d6be16ef6 100644 --- a/src/core/gdbstub/gdbstub.cpp +++ b/src/core/gdbstub/gdbstub.cpp | |||
| @@ -644,7 +644,7 @@ static void ReadMemory() { | |||
| 644 | 644 | ||
| 645 | auto start_offset = command_buffer + 1; | 645 | auto start_offset = command_buffer + 1; |
| 646 | auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); | 646 | auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); |
| 647 | PAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); | 647 | VAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); |
| 648 | 648 | ||
| 649 | start_offset = addr_pos + 1; | 649 | start_offset = addr_pos + 1; |
| 650 | u32 len = | 650 | u32 len = |
| @@ -656,12 +656,14 @@ static void ReadMemory() { | |||
| 656 | SendReply("E01"); | 656 | SendReply("E01"); |
| 657 | } | 657 | } |
| 658 | 658 | ||
| 659 | const u8* data = Memory::GetPointer(addr); | 659 | if (!Memory::IsValidVirtualAddress(addr)) { |
| 660 | if (!data) { | ||
| 661 | return SendReply("E00"); | 660 | return SendReply("E00"); |
| 662 | } | 661 | } |
| 663 | 662 | ||
| 664 | MemToGdbHex(reply, data, len); | 663 | std::vector<u8> data(len); |
| 664 | Memory::ReadBlock(addr, data.data(), len); | ||
| 665 | |||
| 666 | MemToGdbHex(reply, data.data(), len); | ||
| 665 | reply[len * 2] = '\0'; | 667 | reply[len * 2] = '\0'; |
| 666 | SendReply(reinterpret_cast<char*>(reply)); | 668 | SendReply(reinterpret_cast<char*>(reply)); |
| 667 | } | 669 | } |
| @@ -670,18 +672,20 @@ static void ReadMemory() { | |||
| 670 | static void WriteMemory() { | 672 | static void WriteMemory() { |
| 671 | auto start_offset = command_buffer + 1; | 673 | auto start_offset = command_buffer + 1; |
| 672 | auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); | 674 | auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); |
| 673 | PAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); | 675 | VAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); |
| 674 | 676 | ||
| 675 | start_offset = addr_pos + 1; | 677 | start_offset = addr_pos + 1; |
| 676 | auto len_pos = std::find(start_offset, command_buffer + command_length, ':'); | 678 | auto len_pos = std::find(start_offset, command_buffer + command_length, ':'); |
| 677 | u32 len = HexToInt(start_offset, static_cast<u32>(len_pos - start_offset)); | 679 | u32 len = HexToInt(start_offset, static_cast<u32>(len_pos - start_offset)); |
| 678 | 680 | ||
| 679 | u8* dst = Memory::GetPointer(addr); | 681 | if (!Memory::IsValidVirtualAddress(addr)) { |
| 680 | if (!dst) { | ||
| 681 | return SendReply("E00"); | 682 | return SendReply("E00"); |
| 682 | } | 683 | } |
| 683 | 684 | ||
| 684 | GdbHexToMem(dst, len_pos + 1, len); | 685 | std::vector<u8> data(len); |
| 686 | |||
| 687 | GdbHexToMem(data.data(), len_pos + 1, len); | ||
| 688 | Memory::WriteBlock(addr, data.data(), len); | ||
| 685 | SendReply("OK"); | 689 | SendReply("OK"); |
| 686 | } | 690 | } |
| 687 | 691 | ||
| @@ -946,7 +950,7 @@ static void Init(u16 port) { | |||
| 946 | WSAStartup(MAKEWORD(2, 2), &InitData); | 950 | WSAStartup(MAKEWORD(2, 2), &InitData); |
| 947 | #endif | 951 | #endif |
| 948 | 952 | ||
| 949 | int tmpsock = socket(PF_INET, SOCK_STREAM, 0); | 953 | int tmpsock = static_cast<int>(socket(PF_INET, SOCK_STREAM, 0)); |
| 950 | if (tmpsock == -1) { | 954 | if (tmpsock == -1) { |
| 951 | LOG_ERROR(Debug_GDBStub, "Failed to create gdb socket"); | 955 | LOG_ERROR(Debug_GDBStub, "Failed to create gdb socket"); |
| 952 | } | 956 | } |
| @@ -973,7 +977,7 @@ static void Init(u16 port) { | |||
| 973 | sockaddr_in saddr_client; | 977 | sockaddr_in saddr_client; |
| 974 | sockaddr* client_addr = reinterpret_cast<sockaddr*>(&saddr_client); | 978 | sockaddr* client_addr = reinterpret_cast<sockaddr*>(&saddr_client); |
| 975 | socklen_t client_addrlen = sizeof(saddr_client); | 979 | socklen_t client_addrlen = sizeof(saddr_client); |
| 976 | gdbserver_socket = accept(tmpsock, client_addr, &client_addrlen); | 980 | gdbserver_socket = static_cast<int>(accept(tmpsock, client_addr, &client_addrlen)); |
| 977 | if (gdbserver_socket < 0) { | 981 | if (gdbserver_socket < 0) { |
| 978 | // In the case that we couldn't start the server for whatever reason, just start CPU | 982 | // In the case that we couldn't start the server for whatever reason, just start CPU |
| 979 | // execution like normal. | 983 | // execution like normal. |
diff --git a/src/core/hle/applets/erreula.cpp b/src/core/hle/applets/erreula.cpp index 75d7fd9fc..518f371f5 100644 --- a/src/core/hle/applets/erreula.cpp +++ b/src/core/hle/applets/erreula.cpp | |||
| @@ -31,8 +31,8 @@ ResultCode ErrEula::ReceiveParameter(const Service::APT::MessageParameter& param | |||
| 31 | heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); | 31 | heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); |
| 32 | // Create a SharedMemory that directly points to this heap block. | 32 | // Create a SharedMemory that directly points to this heap block. |
| 33 | framebuffer_memory = Kernel::SharedMemory::CreateForApplet( | 33 | framebuffer_memory = Kernel::SharedMemory::CreateForApplet( |
| 34 | heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, | 34 | heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, |
| 35 | MemoryPermission::ReadWrite, "ErrEula Memory"); | 35 | "ErrEula Memory"); |
| 36 | 36 | ||
| 37 | // Send the response message with the newly created SharedMemory | 37 | // Send the response message with the newly created SharedMemory |
| 38 | Service::APT::MessageParameter result; | 38 | Service::APT::MessageParameter result; |
diff --git a/src/core/hle/applets/mii_selector.cpp b/src/core/hle/applets/mii_selector.cpp index 89f08daa2..f225c23a5 100644 --- a/src/core/hle/applets/mii_selector.cpp +++ b/src/core/hle/applets/mii_selector.cpp | |||
| @@ -38,8 +38,8 @@ ResultCode MiiSelector::ReceiveParameter(const Service::APT::MessageParameter& p | |||
| 38 | heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); | 38 | heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); |
| 39 | // Create a SharedMemory that directly points to this heap block. | 39 | // Create a SharedMemory that directly points to this heap block. |
| 40 | framebuffer_memory = Kernel::SharedMemory::CreateForApplet( | 40 | framebuffer_memory = Kernel::SharedMemory::CreateForApplet( |
| 41 | heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, | 41 | heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, |
| 42 | MemoryPermission::ReadWrite, "MiiSelector Memory"); | 42 | "MiiSelector Memory"); |
| 43 | 43 | ||
| 44 | // Send the response message with the newly created SharedMemory | 44 | // Send the response message with the newly created SharedMemory |
| 45 | Service::APT::MessageParameter result; | 45 | Service::APT::MessageParameter result; |
| @@ -66,7 +66,7 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa | |||
| 66 | // continue. | 66 | // continue. |
| 67 | MiiResult result; | 67 | MiiResult result; |
| 68 | memset(&result, 0, sizeof(result)); | 68 | memset(&result, 0, sizeof(result)); |
| 69 | result.result_code = 0; | 69 | result.return_code = 0; |
| 70 | 70 | ||
| 71 | // Let the application know that we're closing | 71 | // Let the application know that we're closing |
| 72 | Service::APT::MessageParameter message; | 72 | Service::APT::MessageParameter message; |
| @@ -82,5 +82,5 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa | |||
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | void MiiSelector::Update() {} | 84 | void MiiSelector::Update() {} |
| 85 | } | 85 | } // namespace Applets |
| 86 | } // namespace | 86 | } // namespace HLE |
diff --git a/src/core/hle/applets/mii_selector.h b/src/core/hle/applets/mii_selector.h index ec00e29d2..136ce8948 100644 --- a/src/core/hle/applets/mii_selector.h +++ b/src/core/hle/applets/mii_selector.h | |||
| @@ -16,51 +16,46 @@ namespace HLE { | |||
| 16 | namespace Applets { | 16 | namespace Applets { |
| 17 | 17 | ||
| 18 | struct MiiConfig { | 18 | struct MiiConfig { |
| 19 | u8 unk_000; | 19 | u8 enable_cancel_button; |
| 20 | u8 unk_001; | 20 | u8 enable_guest_mii; |
| 21 | u8 unk_002; | 21 | u8 show_on_top_screen; |
| 22 | u8 unk_003; | 22 | INSERT_PADDING_BYTES(5); |
| 23 | u8 unk_004; | 23 | u16 title[0x40]; |
| 24 | INSERT_PADDING_BYTES(4); | ||
| 25 | u8 show_guest_miis; | ||
| 24 | INSERT_PADDING_BYTES(3); | 26 | INSERT_PADDING_BYTES(3); |
| 25 | u16 unk_008; | 27 | u32 initially_selected_mii_index; |
| 26 | INSERT_PADDING_BYTES(0x82); | 28 | u8 guest_mii_whitelist[6]; |
| 27 | u8 unk_08C; | 29 | u8 user_mii_whitelist[0x64]; |
| 28 | INSERT_PADDING_BYTES(3); | ||
| 29 | u16 unk_090; | ||
| 30 | INSERT_PADDING_BYTES(2); | 30 | INSERT_PADDING_BYTES(2); |
| 31 | u32 unk_094; | 31 | u32 magic_value; |
| 32 | u16 unk_098; | ||
| 33 | u8 unk_09A[0x64]; | ||
| 34 | u8 unk_0FE; | ||
| 35 | u8 unk_0FF; | ||
| 36 | u32 unk_100; | ||
| 37 | }; | 32 | }; |
| 38 | |||
| 39 | static_assert(sizeof(MiiConfig) == 0x104, "MiiConfig structure has incorrect size"); | 33 | static_assert(sizeof(MiiConfig) == 0x104, "MiiConfig structure has incorrect size"); |
| 40 | #define ASSERT_REG_POSITION(field_name, position) \ | 34 | #define ASSERT_REG_POSITION(field_name, position) \ |
| 41 | static_assert(offsetof(MiiConfig, field_name) == position, \ | 35 | static_assert(offsetof(MiiConfig, field_name) == position, \ |
| 42 | "Field " #field_name " has invalid position") | 36 | "Field " #field_name " has invalid position") |
| 43 | ASSERT_REG_POSITION(unk_008, 0x08); | 37 | ASSERT_REG_POSITION(title, 0x08); |
| 44 | ASSERT_REG_POSITION(unk_08C, 0x8C); | 38 | ASSERT_REG_POSITION(show_guest_miis, 0x8C); |
| 45 | ASSERT_REG_POSITION(unk_090, 0x90); | 39 | ASSERT_REG_POSITION(initially_selected_mii_index, 0x90); |
| 46 | ASSERT_REG_POSITION(unk_094, 0x94); | 40 | ASSERT_REG_POSITION(guest_mii_whitelist, 0x94); |
| 47 | ASSERT_REG_POSITION(unk_0FE, 0xFE); | ||
| 48 | #undef ASSERT_REG_POSITION | 41 | #undef ASSERT_REG_POSITION |
| 49 | 42 | ||
| 50 | struct MiiResult { | 43 | struct MiiResult { |
| 51 | u32 result_code; | 44 | u32 return_code; |
| 52 | u8 unk_04; | 45 | u32 is_guest_mii_selected; |
| 53 | INSERT_PADDING_BYTES(7); | 46 | u32 selected_guest_mii_index; |
| 54 | u8 unk_0C[0x60]; | 47 | // TODO(mailwl): expand to Mii Format structure: https://www.3dbrew.org/wiki/Mii |
| 55 | u8 unk_6C[0x16]; | 48 | u8 selected_mii_data[0x5C]; |
| 56 | INSERT_PADDING_BYTES(2); | 49 | INSERT_PADDING_BYTES(2); |
| 50 | u16 mii_data_checksum; | ||
| 51 | u16 guest_mii_name[0xC]; | ||
| 57 | }; | 52 | }; |
| 58 | static_assert(sizeof(MiiResult) == 0x84, "MiiResult structure has incorrect size"); | 53 | static_assert(sizeof(MiiResult) == 0x84, "MiiResult structure has incorrect size"); |
| 59 | #define ASSERT_REG_POSITION(field_name, position) \ | 54 | #define ASSERT_REG_POSITION(field_name, position) \ |
| 60 | static_assert(offsetof(MiiResult, field_name) == position, \ | 55 | static_assert(offsetof(MiiResult, field_name) == position, \ |
| 61 | "Field " #field_name " has invalid position") | 56 | "Field " #field_name " has invalid position") |
| 62 | ASSERT_REG_POSITION(unk_0C, 0x0C); | 57 | ASSERT_REG_POSITION(selected_mii_data, 0x0C); |
| 63 | ASSERT_REG_POSITION(unk_6C, 0x6C); | 58 | ASSERT_REG_POSITION(guest_mii_name, 0x6C); |
| 64 | #undef ASSERT_REG_POSITION | 59 | #undef ASSERT_REG_POSITION |
| 65 | 60 | ||
| 66 | class MiiSelector final : public Applet { | 61 | class MiiSelector final : public Applet { |
| @@ -79,5 +74,5 @@ private: | |||
| 79 | 74 | ||
| 80 | MiiConfig config; | 75 | MiiConfig config; |
| 81 | }; | 76 | }; |
| 82 | } | 77 | } // namespace Applets |
| 83 | } // namespace | 78 | } // namespace HLE |
diff --git a/src/core/hle/applets/mint.cpp b/src/core/hle/applets/mint.cpp index 31a79ea17..50d79190b 100644 --- a/src/core/hle/applets/mint.cpp +++ b/src/core/hle/applets/mint.cpp | |||
| @@ -31,8 +31,8 @@ ResultCode Mint::ReceiveParameter(const Service::APT::MessageParameter& paramete | |||
| 31 | heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); | 31 | heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); |
| 32 | // Create a SharedMemory that directly points to this heap block. | 32 | // Create a SharedMemory that directly points to this heap block. |
| 33 | framebuffer_memory = Kernel::SharedMemory::CreateForApplet( | 33 | framebuffer_memory = Kernel::SharedMemory::CreateForApplet( |
| 34 | heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, | 34 | heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, |
| 35 | MemoryPermission::ReadWrite, "Mint Memory"); | 35 | "Mint Memory"); |
| 36 | 36 | ||
| 37 | // Send the response message with the newly created SharedMemory | 37 | // Send the response message with the newly created SharedMemory |
| 38 | Service::APT::MessageParameter result; | 38 | Service::APT::MessageParameter result; |
diff --git a/src/core/hle/applets/swkbd.cpp b/src/core/hle/applets/swkbd.cpp index fdf8807b0..0bc471a3a 100644 --- a/src/core/hle/applets/swkbd.cpp +++ b/src/core/hle/applets/swkbd.cpp | |||
| @@ -41,8 +41,8 @@ ResultCode SoftwareKeyboard::ReceiveParameter(Service::APT::MessageParameter con | |||
| 41 | heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); | 41 | heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); |
| 42 | // Create a SharedMemory that directly points to this heap block. | 42 | // Create a SharedMemory that directly points to this heap block. |
| 43 | framebuffer_memory = Kernel::SharedMemory::CreateForApplet( | 43 | framebuffer_memory = Kernel::SharedMemory::CreateForApplet( |
| 44 | heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, | 44 | heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, |
| 45 | MemoryPermission::ReadWrite, "SoftwareKeyboard Memory"); | 45 | "SoftwareKeyboard Memory"); |
| 46 | 46 | ||
| 47 | // Send the response message with the newly created SharedMemory | 47 | // Send the response message with the newly created SharedMemory |
| 48 | Service::APT::MessageParameter result; | 48 | Service::APT::MessageParameter result; |
diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h index bc81c06b4..31fda6db3 100644 --- a/src/core/hle/function_wrappers.h +++ b/src/core/hle/function_wrappers.h | |||
| @@ -24,19 +24,37 @@ static inline void FuncReturn(u64 res) { | |||
| 24 | Core::CPU().SetReg(0, res); | 24 | Core::CPU().SetReg(0, res); |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | /** | ||
| 28 | * HLE a function return (64-bit) from the current ARM11 userland process | ||
| 29 | * @param res Result to return (64-bit) | ||
| 30 | * @todo Verify that this function is correct | ||
| 31 | */ | ||
| 32 | static inline void FuncReturn64(u64 res) { | ||
| 33 | Core::CPU().SetReg(0, (u32)(res & 0xFFFFFFFF)); | ||
| 34 | Core::CPU().SetReg(1, (u32)((res >> 32) & 0xFFFFFFFF)); | ||
| 35 | } | ||
| 36 | |||
| 37 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 27 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 38 | // Function wrappers that return type ResultCode | 28 | // Function wrappers that return type ResultCode |
| 39 | 29 | ||
| 30 | template <ResultCode func(u64)> | ||
| 31 | void Wrap() { | ||
| 32 | FuncReturn(func(PARAM(0)).raw); | ||
| 33 | } | ||
| 34 | |||
| 35 | template <ResultCode func(u32, u64, u32)> | ||
| 36 | void Wrap() { | ||
| 37 | FuncReturn(func(PARAM(0), PARAM(1), PARAM(2)).raw); | ||
| 38 | } | ||
| 39 | |||
| 40 | template <ResultCode func(u64, u32)> | ||
| 41 | void Wrap() { | ||
| 42 | FuncReturn(func(PARAM(0), PARAM(1)).raw); | ||
| 43 | } | ||
| 44 | |||
| 45 | template <ResultCode func(u64, u64, u64)> | ||
| 46 | void Wrap() { | ||
| 47 | FuncReturn(func(PARAM(0), PARAM(1), PARAM(2)).raw); | ||
| 48 | } | ||
| 49 | |||
| 50 | template <ResultCode func(u64*, u64, u64, u64)> | ||
| 51 | void Wrap() { | ||
| 52 | u64 param_1 = 0; | ||
| 53 | u32 retval = func(¶m_1, PARAM(1), PARAM(2), PARAM(3)).raw; | ||
| 54 | Core::CPU().SetReg(1, param_1); | ||
| 55 | FuncReturn(retval); | ||
| 56 | } | ||
| 57 | |||
| 40 | template <ResultCode func(u32, u32, u32, u32)> | 58 | template <ResultCode func(u32, u32, u32, u32)> |
| 41 | void Wrap() { | 59 | void Wrap() { |
| 42 | FuncReturn(func(PARAM(0), PARAM(1), PARAM(2), PARAM(3)).raw); | 60 | FuncReturn(func(PARAM(0), PARAM(1), PARAM(2), PARAM(3)).raw); |
| @@ -58,22 +76,21 @@ void Wrap() { | |||
| 58 | FuncReturn(retval); | 76 | FuncReturn(retval); |
| 59 | } | 77 | } |
| 60 | 78 | ||
| 61 | template <ResultCode func(s32*, u32*, s32, bool, s64)> | 79 | template <ResultCode func(s32*, VAddr, s32, bool, s64)> |
| 62 | void Wrap() { | 80 | void Wrap() { |
| 63 | s32 param_1 = 0; | 81 | s32 param_1 = 0; |
| 64 | s32 retval = func(¶m_1, (Kernel::Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2), | 82 | s32 retval = |
| 65 | (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0))) | 83 | func(¶m_1, PARAM(1), (s32)PARAM(2), (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0))) |
| 66 | .raw; | 84 | .raw; |
| 67 | 85 | ||
| 68 | Core::CPU().SetReg(1, (u32)param_1); | 86 | Core::CPU().SetReg(1, (u32)param_1); |
| 69 | FuncReturn(retval); | 87 | FuncReturn(retval); |
| 70 | } | 88 | } |
| 71 | 89 | ||
| 72 | template <ResultCode func(s32*, u32*, s32, u32)> | 90 | template <ResultCode func(s32*, VAddr, s32, u32)> |
| 73 | void Wrap() { | 91 | void Wrap() { |
| 74 | s32 param_1 = 0; | 92 | s32 param_1 = 0; |
| 75 | u32 retval = | 93 | u32 retval = func(¶m_1, PARAM(1), (s32)PARAM(2), PARAM(3)).raw; |
| 76 | func(¶m_1, (Kernel::Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2), PARAM(3)).raw; | ||
| 77 | 94 | ||
| 78 | Core::CPU().SetReg(1, (u32)param_1); | 95 | Core::CPU().SetReg(1, (u32)param_1); |
| 79 | FuncReturn(retval); | 96 | FuncReturn(retval); |
| @@ -85,6 +102,14 @@ void Wrap() { | |||
| 85 | func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), (((s64)PARAM(5) << 32) | PARAM(4))).raw); | 102 | func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), (((s64)PARAM(5) << 32) | PARAM(4))).raw); |
| 86 | } | 103 | } |
| 87 | 104 | ||
| 105 | template <ResultCode func(u32, u64*)> | ||
| 106 | void Wrap() { | ||
| 107 | u64 param_1 = 0; | ||
| 108 | u32 retval = func(PARAM(0), ¶m_1).raw; | ||
| 109 | Core::CPU().SetReg(1, param_1); | ||
| 110 | FuncReturn(retval); | ||
| 111 | } | ||
| 112 | |||
| 88 | template <ResultCode func(u32*)> | 113 | template <ResultCode func(u32*)> |
| 89 | void Wrap() { | 114 | void Wrap() { |
| 90 | u32 param_1 = 0; | 115 | u32 param_1 = 0; |
| @@ -100,16 +125,17 @@ void Wrap() { | |||
| 100 | FuncReturn(retval); | 125 | FuncReturn(retval); |
| 101 | } | 126 | } |
| 102 | 127 | ||
| 103 | template <ResultCode func(MemoryInfo*, PageInfo*, u32)> | 128 | template <ResultCode func(MemoryInfo*, PageInfo*, u64)> |
| 104 | void Wrap() { | 129 | void Wrap() { |
| 105 | MemoryInfo memory_info = {}; | 130 | MemoryInfo memory_info = {}; |
| 106 | PageInfo page_info = {}; | 131 | PageInfo page_info = {}; |
| 107 | u32 retval = func(&memory_info, &page_info, PARAM(2)).raw; | 132 | u32 retval = func(&memory_info, &page_info, PARAM(2)).raw; |
| 108 | Core::CPU().SetReg(1, memory_info.base_address); | 133 | |
| 109 | Core::CPU().SetReg(2, memory_info.size); | 134 | Memory::Write64(PARAM(0), memory_info.base_address); |
| 110 | Core::CPU().SetReg(3, memory_info.permission); | 135 | Memory::Write64(PARAM(0) + 8, memory_info.size); |
| 111 | Core::CPU().SetReg(4, memory_info.state); | 136 | Memory::Write64(PARAM(0) + 16, memory_info.permission); |
| 112 | Core::CPU().SetReg(5, page_info.flags); | 137 | Memory::Write64(PARAM(0) + 24, memory_info.state); |
| 138 | |||
| 113 | FuncReturn(retval); | 139 | FuncReturn(retval); |
| 114 | } | 140 | } |
| 115 | 141 | ||
| @@ -139,7 +165,7 @@ void Wrap() { | |||
| 139 | FuncReturn(func(PARAM(0), (s32)PARAM(1)).raw); | 165 | FuncReturn(func(PARAM(0), (s32)PARAM(1)).raw); |
| 140 | } | 166 | } |
| 141 | 167 | ||
| 142 | template <ResultCode func(u32*, u32)> | 168 | template <ResultCode func(u32*, u64)> |
| 143 | void Wrap() { | 169 | void Wrap() { |
| 144 | u32 param_1 = 0; | 170 | u32 param_1 = 0; |
| 145 | u32 retval = func(¶m_1, PARAM(1)).raw; | 171 | u32 retval = func(¶m_1, PARAM(1)).raw; |
| @@ -152,21 +178,6 @@ void Wrap() { | |||
| 152 | FuncReturn(func(PARAM(0)).raw); | 178 | FuncReturn(func(PARAM(0)).raw); |
| 153 | } | 179 | } |
| 154 | 180 | ||
| 155 | template <ResultCode func(s64*, u32, u32*, u32)> | ||
| 156 | void Wrap() { | ||
| 157 | FuncReturn(func((s64*)Memory::GetPointer(PARAM(0)), PARAM(1), | ||
| 158 | (u32*)Memory::GetPointer(PARAM(2)), (s32)PARAM(3)) | ||
| 159 | .raw); | ||
| 160 | } | ||
| 161 | |||
| 162 | template <ResultCode func(u32*, const char*)> | ||
| 163 | void Wrap() { | ||
| 164 | u32 param_1 = 0; | ||
| 165 | u32 retval = func(¶m_1, (char*)Memory::GetPointer(PARAM(1))).raw; | ||
| 166 | Core::CPU().SetReg(1, param_1); | ||
| 167 | FuncReturn(retval); | ||
| 168 | } | ||
| 169 | |||
| 170 | template <ResultCode func(u32*, s32, s32)> | 181 | template <ResultCode func(u32*, s32, s32)> |
| 171 | void Wrap() { | 182 | void Wrap() { |
| 172 | u32 param_1 = 0; | 183 | u32 param_1 = 0; |
| @@ -222,13 +233,11 @@ void Wrap() { | |||
| 222 | FuncReturn(func(PARAM(0), PARAM(1)).raw); | 233 | FuncReturn(func(PARAM(0), PARAM(1)).raw); |
| 223 | } | 234 | } |
| 224 | 235 | ||
| 225 | template <ResultCode func(Kernel::Handle*, Kernel::Handle*, const char*, u32)> | 236 | template <ResultCode func(Kernel::Handle*, Kernel::Handle*, VAddr, u32)> |
| 226 | void Wrap() { | 237 | void Wrap() { |
| 227 | Kernel::Handle param_1 = 0; | 238 | Kernel::Handle param_1 = 0; |
| 228 | Kernel::Handle param_2 = 0; | 239 | Kernel::Handle param_2 = 0; |
| 229 | u32 retval = func(¶m_1, ¶m_2, | 240 | u32 retval = func(¶m_1, ¶m_2, PARAM(2), PARAM(3)).raw; |
| 230 | reinterpret_cast<const char*>(Memory::GetPointer(PARAM(2))), PARAM(3)) | ||
| 231 | .raw; | ||
| 232 | Core::CPU().SetReg(1, param_1); | 241 | Core::CPU().SetReg(1, param_1); |
| 233 | Core::CPU().SetReg(2, param_2); | 242 | Core::CPU().SetReg(2, param_2); |
| 234 | FuncReturn(retval); | 243 | FuncReturn(retval); |
| @@ -244,6 +253,11 @@ void Wrap() { | |||
| 244 | FuncReturn(retval); | 253 | FuncReturn(retval); |
| 245 | } | 254 | } |
| 246 | 255 | ||
| 256 | template <ResultCode func(u32, u32, u32)> | ||
| 257 | void Wrap() { | ||
| 258 | FuncReturn(func(PARAM(0), PARAM(1), PARAM(2)).raw); | ||
| 259 | } | ||
| 260 | |||
| 247 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 261 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 248 | // Function wrappers that return type u32 | 262 | // Function wrappers that return type u32 |
| 249 | 263 | ||
| @@ -268,14 +282,14 @@ void Wrap() { | |||
| 268 | func(((s64)PARAM(1) << 32) | PARAM(0)); | 282 | func(((s64)PARAM(1) << 32) | PARAM(0)); |
| 269 | } | 283 | } |
| 270 | 284 | ||
| 271 | template <void func(const char*, int len)> | 285 | template <void func(VAddr, int len)> |
| 272 | void Wrap() { | 286 | void Wrap() { |
| 273 | func((char*)Memory::GetPointer(PARAM(0)), PARAM(1)); | 287 | func(PARAM(0), PARAM(1)); |
| 274 | } | 288 | } |
| 275 | 289 | ||
| 276 | template <void func(u8)> | 290 | template <void func(u64, u64, u64)> |
| 277 | void Wrap() { | 291 | void Wrap() { |
| 278 | func((u8)PARAM(0)); | 292 | func(PARAM(0), PARAM(1), PARAM(2)); |
| 279 | } | 293 | } |
| 280 | 294 | ||
| 281 | #undef PARAM | 295 | #undef PARAM |
diff --git a/src/core/hle/ipc.h b/src/core/hle/ipc.h index f7f96125a..87ed85df6 100644 --- a/src/core/hle/ipc.h +++ b/src/core/hle/ipc.h | |||
| @@ -122,11 +122,11 @@ union StaticBufferDescInfo { | |||
| 122 | BitField<14, 18, u32> size; | 122 | BitField<14, 18, u32> size; |
| 123 | }; | 123 | }; |
| 124 | 124 | ||
| 125 | inline u32 StaticBufferDesc(u32 size, u8 buffer_id) { | 125 | inline u32 StaticBufferDesc(size_t size, u8 buffer_id) { |
| 126 | StaticBufferDescInfo info{}; | 126 | StaticBufferDescInfo info{}; |
| 127 | info.descriptor_type.Assign(StaticBuffer); | 127 | info.descriptor_type.Assign(StaticBuffer); |
| 128 | info.buffer_id.Assign(buffer_id); | 128 | info.buffer_id.Assign(buffer_id); |
| 129 | info.size.Assign(size); | 129 | info.size.Assign(static_cast<u32>(size)); |
| 130 | return info.raw; | 130 | return info.raw; |
| 131 | } | 131 | } |
| 132 | 132 | ||
| @@ -160,11 +160,11 @@ union MappedBufferDescInfo { | |||
| 160 | BitField<4, 28, u32> size; | 160 | BitField<4, 28, u32> size; |
| 161 | }; | 161 | }; |
| 162 | 162 | ||
| 163 | inline u32 MappedBufferDesc(u32 size, MappedBufferPermissions perms) { | 163 | inline u32 MappedBufferDesc(size_t size, MappedBufferPermissions perms) { |
| 164 | MappedBufferDescInfo info{}; | 164 | MappedBufferDescInfo info{}; |
| 165 | info.flags.Assign(MappedBuffer); | 165 | info.flags.Assign(MappedBuffer); |
| 166 | info.perms.Assign(perms); | 166 | info.perms.Assign(perms); |
| 167 | info.size.Assign(size); | 167 | info.size.Assign(static_cast<u32>(size)); |
| 168 | return info.raw; | 168 | return info.raw; |
| 169 | } | 169 | } |
| 170 | 170 | ||
diff --git a/src/core/hle/ipc_helpers.h b/src/core/hle/ipc_helpers.h index f0d89cffe..7cb95cbac 100644 --- a/src/core/hle/ipc_helpers.h +++ b/src/core/hle/ipc_helpers.h | |||
| @@ -117,9 +117,9 @@ public: | |||
| 117 | 117 | ||
| 118 | void PushCurrentPIDHandle(); | 118 | void PushCurrentPIDHandle(); |
| 119 | 119 | ||
| 120 | void PushStaticBuffer(VAddr buffer_vaddr, u32 size, u8 buffer_id); | 120 | void PushStaticBuffer(VAddr buffer_vaddr, size_t size, u8 buffer_id); |
| 121 | 121 | ||
| 122 | void PushMappedBuffer(VAddr buffer_vaddr, u32 size, MappedBufferPermissions perms); | 122 | void PushMappedBuffer(VAddr buffer_vaddr, size_t size, MappedBufferPermissions perms); |
| 123 | }; | 123 | }; |
| 124 | 124 | ||
| 125 | /// Push /// | 125 | /// Push /// |
| @@ -190,12 +190,12 @@ inline void RequestBuilder::PushCurrentPIDHandle() { | |||
| 190 | Push(u32(0)); | 190 | Push(u32(0)); |
| 191 | } | 191 | } |
| 192 | 192 | ||
| 193 | inline void RequestBuilder::PushStaticBuffer(VAddr buffer_vaddr, u32 size, u8 buffer_id) { | 193 | inline void RequestBuilder::PushStaticBuffer(VAddr buffer_vaddr, size_t size, u8 buffer_id) { |
| 194 | Push(StaticBufferDesc(size, buffer_id)); | 194 | Push(StaticBufferDesc(size, buffer_id)); |
| 195 | Push(buffer_vaddr); | 195 | Push(buffer_vaddr); |
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | inline void RequestBuilder::PushMappedBuffer(VAddr buffer_vaddr, u32 size, | 198 | inline void RequestBuilder::PushMappedBuffer(VAddr buffer_vaddr, size_t size, |
| 199 | MappedBufferPermissions perms) { | 199 | MappedBufferPermissions perms) { |
| 200 | Push(MappedBufferDesc(size, perms)); | 200 | Push(MappedBufferDesc(size, perms)); |
| 201 | Push(buffer_vaddr); | 201 | Push(buffer_vaddr); |
| @@ -227,8 +227,8 @@ public: | |||
| 227 | bool validateHeader = true) { | 227 | bool validateHeader = true) { |
| 228 | if (validateHeader) | 228 | if (validateHeader) |
| 229 | ValidateHeader(); | 229 | ValidateHeader(); |
| 230 | Header builderHeader{ | 230 | Header builderHeader{MakeHeader(static_cast<u16>(header.command_id), normal_params_size, |
| 231 | MakeHeader(header.command_id, normal_params_size, translate_params_size)}; | 231 | translate_params_size)}; |
| 232 | if (context != nullptr) | 232 | if (context != nullptr) |
| 233 | return {*context, builderHeader}; | 233 | return {*context, builderHeader}; |
| 234 | else | 234 | else |
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index 5ebe2eca4..6020e9764 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp | |||
| @@ -37,7 +37,7 @@ SharedPtr<Object> HLERequestContext::GetIncomingHandle(u32 id_from_cmdbuf) const | |||
| 37 | 37 | ||
| 38 | u32 HLERequestContext::AddOutgoingHandle(SharedPtr<Object> object) { | 38 | u32 HLERequestContext::AddOutgoingHandle(SharedPtr<Object> object) { |
| 39 | request_handles.push_back(std::move(object)); | 39 | request_handles.push_back(std::move(object)); |
| 40 | return request_handles.size() - 1; | 40 | return static_cast<u32>(request_handles.size() - 1); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | void HLERequestContext::ClearIncomingObjects() { | 43 | void HLERequestContext::ClearIncomingObjects() { |
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 9cf288b08..73fab3981 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include <string> | 8 | #include <string> |
| 9 | #include <utility> | 9 | #include <utility> |
| 10 | #include <boost/smart_ptr/intrusive_ptr.hpp> | 10 | #include <boost/smart_ptr/intrusive_ptr.hpp> |
| 11 | #include "common/assert.h" | ||
| 11 | #include "common/common_types.h" | 12 | #include "common/common_types.h" |
| 12 | 13 | ||
| 13 | namespace Kernel { | 14 | namespace Kernel { |
| @@ -84,6 +85,8 @@ public: | |||
| 84 | case HandleType::ClientSession: | 85 | case HandleType::ClientSession: |
| 85 | return false; | 86 | return false; |
| 86 | } | 87 | } |
| 88 | |||
| 89 | UNREACHABLE(); | ||
| 87 | } | 90 | } |
| 88 | 91 | ||
| 89 | public: | 92 | public: |
| @@ -129,4 +132,4 @@ void Init(u32 system_mode); | |||
| 129 | /// Shutdown the kernel | 132 | /// Shutdown the kernel |
| 130 | void Shutdown(); | 133 | void Shutdown(); |
| 131 | 134 | ||
| 132 | } // namespace | 135 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/memory.cpp b/src/core/hle/kernel/memory.cpp index 496d07cb5..7f27e9655 100644 --- a/src/core/hle/kernel/memory.cpp +++ b/src/core/hle/kernel/memory.cpp | |||
| @@ -8,7 +8,6 @@ | |||
| 8 | #include <memory> | 8 | #include <memory> |
| 9 | #include <utility> | 9 | #include <utility> |
| 10 | #include <vector> | 10 | #include <vector> |
| 11 | #include "audio_core/audio_core.h" | ||
| 12 | #include "common/assert.h" | 11 | #include "common/assert.h" |
| 13 | #include "common/common_types.h" | 12 | #include "common/common_types.h" |
| 14 | #include "common/logging/log.h" | 13 | #include "common/logging/log.h" |
| @@ -24,7 +23,7 @@ | |||
| 24 | 23 | ||
| 25 | namespace Kernel { | 24 | namespace Kernel { |
| 26 | 25 | ||
| 27 | static MemoryRegionInfo memory_regions[3]; | 26 | MemoryRegionInfo memory_regions[3]; |
| 28 | 27 | ||
| 29 | /// Size of the APPLICATION, SYSTEM and BASE memory regions (respectively) for each system | 28 | /// Size of the APPLICATION, SYSTEM and BASE memory regions (respectively) for each system |
| 30 | /// memory configuration type. | 29 | /// memory configuration type. |
| @@ -96,9 +95,6 @@ MemoryRegionInfo* GetMemoryRegion(MemoryRegion region) { | |||
| 96 | } | 95 | } |
| 97 | } | 96 | } |
| 98 | 97 | ||
| 99 | std::array<u8, Memory::VRAM_SIZE> vram; | ||
| 100 | std::array<u8, Memory::N3DS_EXTRA_RAM_SIZE> n3ds_extra_ram; | ||
| 101 | |||
| 102 | void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping) { | 98 | void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping) { |
| 103 | using namespace Memory; | 99 | using namespace Memory; |
| 104 | 100 | ||
| @@ -143,30 +139,14 @@ void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mappin | |||
| 143 | return; | 139 | return; |
| 144 | } | 140 | } |
| 145 | 141 | ||
| 146 | // TODO(yuriks): Use GetPhysicalPointer when that becomes independent of the virtual | 142 | u8* target_pointer = Memory::GetPhysicalPointer(area->paddr_base + offset_into_region); |
| 147 | // mappings. | ||
| 148 | u8* target_pointer = nullptr; | ||
| 149 | switch (area->paddr_base) { | ||
| 150 | case VRAM_PADDR: | ||
| 151 | target_pointer = vram.data(); | ||
| 152 | break; | ||
| 153 | case DSP_RAM_PADDR: | ||
| 154 | target_pointer = AudioCore::GetDspMemory().data(); | ||
| 155 | break; | ||
| 156 | case N3DS_EXTRA_RAM_PADDR: | ||
| 157 | target_pointer = n3ds_extra_ram.data(); | ||
| 158 | break; | ||
| 159 | default: | ||
| 160 | UNREACHABLE(); | ||
| 161 | } | ||
| 162 | 143 | ||
| 163 | // TODO(yuriks): This flag seems to have some other effect, but it's unknown what | 144 | // TODO(yuriks): This flag seems to have some other effect, but it's unknown what |
| 164 | MemoryState memory_state = mapping.unk_flag ? MemoryState::Static : MemoryState::IO; | 145 | MemoryState memory_state = mapping.unk_flag ? MemoryState::Static : MemoryState::IO; |
| 165 | 146 | ||
| 166 | auto vma = address_space | 147 | auto vma = |
| 167 | .MapBackingMemory(mapping.address, target_pointer + offset_into_region, | 148 | address_space.MapBackingMemory(mapping.address, target_pointer, mapping.size, memory_state) |
| 168 | mapping.size, memory_state) | 149 | .Unwrap(); |
| 169 | .Unwrap(); | ||
| 170 | address_space.Reprotect(vma, | 150 | address_space.Reprotect(vma, |
| 171 | mapping.read_only ? VMAPermission::Read : VMAPermission::ReadWrite); | 151 | mapping.read_only ? VMAPermission::Read : VMAPermission::ReadWrite); |
| 172 | } | 152 | } |
diff --git a/src/core/hle/kernel/memory.h b/src/core/hle/kernel/memory.h index 08c1a9989..da6bb3563 100644 --- a/src/core/hle/kernel/memory.h +++ b/src/core/hle/kernel/memory.h | |||
| @@ -26,4 +26,6 @@ MemoryRegionInfo* GetMemoryRegion(MemoryRegion region); | |||
| 26 | 26 | ||
| 27 | void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping); | 27 | void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping); |
| 28 | void MapSharedPages(VMManager& address_space); | 28 | void MapSharedPages(VMManager& address_space); |
| 29 | |||
| 30 | extern MemoryRegionInfo memory_regions[3]; | ||
| 29 | } // namespace Kernel | 31 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp index cef961289..30dade552 100644 --- a/src/core/hle/kernel/mutex.cpp +++ b/src/core/hle/kernel/mutex.cpp | |||
| @@ -25,10 +25,11 @@ void ReleaseThreadMutexes(Thread* thread) { | |||
| 25 | Mutex::Mutex() {} | 25 | Mutex::Mutex() {} |
| 26 | Mutex::~Mutex() {} | 26 | Mutex::~Mutex() {} |
| 27 | 27 | ||
| 28 | SharedPtr<Mutex> Mutex::Create(bool initial_locked, std::string name) { | 28 | SharedPtr<Mutex> Mutex::Create(bool initial_locked, VAddr addr, std::string name) { |
| 29 | SharedPtr<Mutex> mutex(new Mutex); | 29 | SharedPtr<Mutex> mutex(new Mutex); |
| 30 | 30 | ||
| 31 | mutex->lock_count = 0; | 31 | mutex->lock_count = 0; |
| 32 | mutex->addr = addr; | ||
| 32 | mutex->name = std::move(name); | 33 | mutex->name = std::move(name); |
| 33 | mutex->holding_thread = nullptr; | 34 | mutex->holding_thread = nullptr; |
| 34 | 35 | ||
| @@ -90,7 +91,7 @@ void Mutex::UpdatePriority() { | |||
| 90 | if (!holding_thread) | 91 | if (!holding_thread) |
| 91 | return; | 92 | return; |
| 92 | 93 | ||
| 93 | s32 best_priority = THREADPRIO_LOWEST; | 94 | u32 best_priority = THREADPRIO_LOWEST; |
| 94 | for (auto& waiter : GetWaitingThreads()) { | 95 | for (auto& waiter : GetWaitingThreads()) { |
| 95 | if (waiter->current_priority < best_priority) | 96 | if (waiter->current_priority < best_priority) |
| 96 | best_priority = waiter->current_priority; | 97 | best_priority = waiter->current_priority; |
diff --git a/src/core/hle/kernel/mutex.h b/src/core/hle/kernel/mutex.h index bacacd690..503d3ee75 100644 --- a/src/core/hle/kernel/mutex.h +++ b/src/core/hle/kernel/mutex.h | |||
| @@ -21,7 +21,7 @@ public: | |||
| 21 | * @param name Optional name of mutex | 21 | * @param name Optional name of mutex |
| 22 | * @return Pointer to new Mutex object | 22 | * @return Pointer to new Mutex object |
| 23 | */ | 23 | */ |
| 24 | static SharedPtr<Mutex> Create(bool initial_locked, std::string name = "Unknown"); | 24 | static SharedPtr<Mutex> Create(bool initial_locked, VAddr addr, std::string name = "Unknown"); |
| 25 | 25 | ||
| 26 | std::string GetTypeName() const override { | 26 | std::string GetTypeName() const override { |
| 27 | return "Mutex"; | 27 | return "Mutex"; |
| @@ -39,6 +39,7 @@ public: | |||
| 39 | u32 priority; ///< The priority of the mutex, used for priority inheritance. | 39 | u32 priority; ///< The priority of the mutex, used for priority inheritance. |
| 40 | std::string name; ///< Name of mutex (optional) | 40 | std::string name; ///< Name of mutex (optional) |
| 41 | SharedPtr<Thread> holding_thread; ///< Thread that has acquired the mutex | 41 | SharedPtr<Thread> holding_thread; ///< Thread that has acquired the mutex |
| 42 | VAddr addr; | ||
| 42 | 43 | ||
| 43 | /** | 44 | /** |
| 44 | * Elevate the mutex priority to the best priority | 45 | * Elevate the mutex priority to the best priority |
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 84ebdbc58..9e145866f 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp | |||
| @@ -129,7 +129,8 @@ void Process::Run(VAddr entry_point, s32 main_thread_priority, u32 stack_size) { | |||
| 129 | } | 129 | } |
| 130 | 130 | ||
| 131 | vm_manager.LogLayout(Log::Level::Debug); | 131 | vm_manager.LogLayout(Log::Level::Debug); |
| 132 | Kernel::SetupMainThread(entry_point, main_thread_priority); | 132 | |
| 133 | Kernel::SetupMainThread(entry_point, main_thread_priority, this); | ||
| 133 | } | 134 | } |
| 134 | 135 | ||
| 135 | void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) { | 136 | void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) { |
diff --git a/src/core/hle/kernel/resource_limit.cpp b/src/core/hle/kernel/resource_limit.cpp index a8f10a3ee..517dc47a8 100644 --- a/src/core/hle/kernel/resource_limit.cpp +++ b/src/core/hle/kernel/resource_limit.cpp | |||
| @@ -61,7 +61,7 @@ s32 ResourceLimit::GetCurrentResourceValue(u32 resource) const { | |||
| 61 | } | 61 | } |
| 62 | } | 62 | } |
| 63 | 63 | ||
| 64 | s32 ResourceLimit::GetMaxResourceValue(u32 resource) const { | 64 | u32 ResourceLimit::GetMaxResourceValue(u32 resource) const { |
| 65 | switch (resource) { | 65 | switch (resource) { |
| 66 | case PRIORITY: | 66 | case PRIORITY: |
| 67 | return max_priority; | 67 | return max_priority; |
diff --git a/src/core/hle/kernel/resource_limit.h b/src/core/hle/kernel/resource_limit.h index 6cdfbcf8d..42874eb8d 100644 --- a/src/core/hle/kernel/resource_limit.h +++ b/src/core/hle/kernel/resource_limit.h | |||
| @@ -67,7 +67,7 @@ public: | |||
| 67 | * @param resource Requested resource type | 67 | * @param resource Requested resource type |
| 68 | * @returns The max value of the resource type | 68 | * @returns The max value of the resource type |
| 69 | */ | 69 | */ |
| 70 | s32 GetMaxResourceValue(u32 resource) const; | 70 | u32 GetMaxResourceValue(u32 resource) const; |
| 71 | 71 | ||
| 72 | /// Name of resource limit object. | 72 | /// Name of resource limit object. |
| 73 | std::string name; | 73 | std::string name; |
diff --git a/src/core/hle/kernel/semaphore.cpp b/src/core/hle/kernel/semaphore.cpp index fcf586728..2605b2595 100644 --- a/src/core/hle/kernel/semaphore.cpp +++ b/src/core/hle/kernel/semaphore.cpp | |||
| @@ -13,7 +13,7 @@ namespace Kernel { | |||
| 13 | Semaphore::Semaphore() {} | 13 | Semaphore::Semaphore() {} |
| 14 | Semaphore::~Semaphore() {} | 14 | Semaphore::~Semaphore() {} |
| 15 | 15 | ||
| 16 | ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_count, | 16 | ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_count, VAddr address, |
| 17 | std::string name) { | 17 | std::string name) { |
| 18 | 18 | ||
| 19 | if (initial_count > max_count) | 19 | if (initial_count > max_count) |
| @@ -25,6 +25,7 @@ ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_cou | |||
| 25 | // and the rest is reserved for the caller thread | 25 | // and the rest is reserved for the caller thread |
| 26 | semaphore->max_count = max_count; | 26 | semaphore->max_count = max_count; |
| 27 | semaphore->available_count = initial_count; | 27 | semaphore->available_count = initial_count; |
| 28 | semaphore->address = address; | ||
| 28 | semaphore->name = std::move(name); | 29 | semaphore->name = std::move(name); |
| 29 | 30 | ||
| 30 | return MakeResult<SharedPtr<Semaphore>>(std::move(semaphore)); | 31 | return MakeResult<SharedPtr<Semaphore>>(std::move(semaphore)); |
diff --git a/src/core/hle/kernel/semaphore.h b/src/core/hle/kernel/semaphore.h index 7b0cacf2e..77c491a24 100644 --- a/src/core/hle/kernel/semaphore.h +++ b/src/core/hle/kernel/semaphore.h | |||
| @@ -22,7 +22,7 @@ public: | |||
| 22 | * @param name Optional name of semaphore | 22 | * @param name Optional name of semaphore |
| 23 | * @return The created semaphore | 23 | * @return The created semaphore |
| 24 | */ | 24 | */ |
| 25 | static ResultVal<SharedPtr<Semaphore>> Create(s32 initial_count, s32 max_count, | 25 | static ResultVal<SharedPtr<Semaphore>> Create(s32 initial_count, s32 max_count, VAddr address, |
| 26 | std::string name = "Unknown"); | 26 | std::string name = "Unknown"); |
| 27 | 27 | ||
| 28 | std::string GetTypeName() const override { | 28 | std::string GetTypeName() const override { |
| @@ -39,6 +39,7 @@ public: | |||
| 39 | 39 | ||
| 40 | s32 max_count; ///< Maximum number of simultaneous holders the semaphore can have | 40 | s32 max_count; ///< Maximum number of simultaneous holders the semaphore can have |
| 41 | s32 available_count; ///< Number of free slots left in the semaphore | 41 | s32 available_count; ///< Number of free slots left in the semaphore |
| 42 | VAddr address; | ||
| 42 | std::string name; ///< Name of semaphore (optional) | 43 | std::string name; ///< Name of semaphore (optional) |
| 43 | 44 | ||
| 44 | bool ShouldWait(Thread* thread) const override; | 45 | bool ShouldWait(Thread* thread) const override; |
diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp index a7b66142f..d45daca35 100644 --- a/src/core/hle/kernel/shared_memory.cpp +++ b/src/core/hle/kernel/shared_memory.cpp | |||
| @@ -42,7 +42,8 @@ SharedPtr<SharedMemory> SharedMemory::Create(SharedPtr<Process> owner_process, u | |||
| 42 | memory_region->used += size; | 42 | memory_region->used += size; |
| 43 | 43 | ||
| 44 | shared_memory->linear_heap_phys_address = | 44 | shared_memory->linear_heap_phys_address = |
| 45 | Memory::FCRAM_PADDR + memory_region->base + shared_memory->backing_block_offset; | 45 | Memory::FCRAM_PADDR + memory_region->base + |
| 46 | static_cast<PAddr>(shared_memory->backing_block_offset); | ||
| 46 | 47 | ||
| 47 | // Increase the amount of used linear heap memory for the owner process. | 48 | // Increase the amount of used linear heap memory for the owner process. |
| 48 | if (shared_memory->owner_process != nullptr) { | 49 | if (shared_memory->owner_process != nullptr) { |
| @@ -54,22 +55,19 @@ SharedPtr<SharedMemory> SharedMemory::Create(SharedPtr<Process> owner_process, u | |||
| 54 | Kernel::g_current_process->vm_manager.RefreshMemoryBlockMappings(linheap_memory.get()); | 55 | Kernel::g_current_process->vm_manager.RefreshMemoryBlockMappings(linheap_memory.get()); |
| 55 | } | 56 | } |
| 56 | } else { | 57 | } else { |
| 57 | // TODO(Subv): What happens if an application tries to create multiple memory blocks | ||
| 58 | // pointing to the same address? | ||
| 59 | auto& vm_manager = shared_memory->owner_process->vm_manager; | 58 | auto& vm_manager = shared_memory->owner_process->vm_manager; |
| 60 | // The memory is already available and mapped in the owner process. | 59 | // The memory is already available and mapped in the owner process. |
| 61 | auto vma = vm_manager.FindVMA(address)->second; | 60 | auto vma = vm_manager.FindVMA(address); |
| 62 | // Copy it over to our own storage | 61 | ASSERT_MSG(vma != vm_manager.vma_map.end(), "Invalid memory address"); |
| 63 | shared_memory->backing_block = std::make_shared<std::vector<u8>>( | 62 | ASSERT_MSG(vma->second.backing_block, "Backing block doesn't exist for address"); |
| 64 | vma.backing_block->data() + vma.offset, vma.backing_block->data() + vma.offset + size); | 63 | |
| 65 | shared_memory->backing_block_offset = 0; | 64 | // The returned VMA might be a bigger one encompassing the desired address. |
| 66 | // Unmap the existing pages | 65 | auto vma_offset = address - vma->first; |
| 67 | vm_manager.UnmapRange(address, size); | 66 | ASSERT_MSG(vma_offset + size <= vma->second.size, |
| 68 | // Map our own block into the address space | 67 | "Shared memory exceeds bounds of mapped block"); |
| 69 | vm_manager.MapMemoryBlock(address, shared_memory->backing_block, 0, size, | 68 | |
| 70 | MemoryState::Shared); | 69 | shared_memory->backing_block = vma->second.backing_block; |
| 71 | // Reprotect the block with the new permissions | 70 | shared_memory->backing_block_offset = vma->second.offset + vma_offset; |
| 72 | vm_manager.ReprotectRange(address, size, ConvertPermissions(permissions)); | ||
| 73 | } | 71 | } |
| 74 | 72 | ||
| 75 | shared_memory->base_address = address; | 73 | shared_memory->base_address = address; |
| @@ -183,4 +181,4 @@ u8* SharedMemory::GetPointer(u32 offset) { | |||
| 183 | return backing_block->data() + backing_block_offset + offset; | 181 | return backing_block->data() + backing_block_offset + offset; |
| 184 | } | 182 | } |
| 185 | 183 | ||
| 186 | } // namespace | 184 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/shared_memory.h b/src/core/hle/kernel/shared_memory.h index 94b335ed1..93a6f2182 100644 --- a/src/core/hle/kernel/shared_memory.h +++ b/src/core/hle/kernel/shared_memory.h | |||
| @@ -114,7 +114,7 @@ public: | |||
| 114 | /// Backing memory for this shared memory block. | 114 | /// Backing memory for this shared memory block. |
| 115 | std::shared_ptr<std::vector<u8>> backing_block; | 115 | std::shared_ptr<std::vector<u8>> backing_block; |
| 116 | /// Offset into the backing block for this shared memory. | 116 | /// Offset into the backing block for this shared memory. |
| 117 | u32 backing_block_offset; | 117 | size_t backing_block_offset; |
| 118 | /// Size of the memory block. Page-aligned. | 118 | /// Size of the memory block. Page-aligned. |
| 119 | u32 size; | 119 | u32 size; |
| 120 | /// Permission restrictions applied to the process which created the block. | 120 | /// Permission restrictions applied to the process which created the block. |
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index c01d08ebb..75df49ac2 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp | |||
| @@ -111,7 +111,7 @@ void Thread::Stop() { | |||
| 111 | 111 | ||
| 112 | Thread* ArbitrateHighestPriorityThread(u32 address) { | 112 | Thread* ArbitrateHighestPriorityThread(u32 address) { |
| 113 | Thread* highest_priority_thread = nullptr; | 113 | Thread* highest_priority_thread = nullptr; |
| 114 | s32 priority = THREADPRIO_LOWEST; | 114 | u32 priority = THREADPRIO_LOWEST; |
| 115 | 115 | ||
| 116 | // Iterate through threads, find highest priority thread that is waiting to be arbitrated... | 116 | // Iterate through threads, find highest priority thread that is waiting to be arbitrated... |
| 117 | for (auto& thread : thread_list) { | 117 | for (auto& thread : thread_list) { |
| @@ -171,15 +171,24 @@ static void SwitchContext(Thread* new_thread) { | |||
| 171 | // Cancel any outstanding wakeup events for this thread | 171 | // Cancel any outstanding wakeup events for this thread |
| 172 | CoreTiming::UnscheduleEvent(ThreadWakeupEventType, new_thread->callback_handle); | 172 | CoreTiming::UnscheduleEvent(ThreadWakeupEventType, new_thread->callback_handle); |
| 173 | 173 | ||
| 174 | auto previous_process = Kernel::g_current_process; | ||
| 175 | |||
| 174 | current_thread = new_thread; | 176 | current_thread = new_thread; |
| 175 | 177 | ||
| 176 | ready_queue.remove(new_thread->current_priority, new_thread); | 178 | ready_queue.remove(new_thread->current_priority, new_thread); |
| 177 | new_thread->status = THREADSTATUS_RUNNING; | 179 | new_thread->status = THREADSTATUS_RUNNING; |
| 178 | 180 | ||
| 181 | if (previous_process != current_thread->owner_process) { | ||
| 182 | Kernel::g_current_process = current_thread->owner_process; | ||
| 183 | SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); | ||
| 184 | } | ||
| 185 | |||
| 179 | Core::CPU().LoadContext(new_thread->context); | 186 | Core::CPU().LoadContext(new_thread->context); |
| 180 | Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); | 187 | Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); |
| 181 | } else { | 188 | } else { |
| 182 | current_thread = nullptr; | 189 | current_thread = nullptr; |
| 190 | // Note: We do not reset the current process and current page table when idling because | ||
| 191 | // technically we haven't changed processes, our threads are just paused. | ||
| 183 | } | 192 | } |
| 184 | } | 193 | } |
| 185 | 194 | ||
| @@ -238,12 +247,15 @@ static void ThreadWakeupCallback(u64 thread_handle, int cycles_late) { | |||
| 238 | 247 | ||
| 239 | if (thread->status == THREADSTATUS_WAIT_SYNCH_ANY || | 248 | if (thread->status == THREADSTATUS_WAIT_SYNCH_ANY || |
| 240 | thread->status == THREADSTATUS_WAIT_SYNCH_ALL || thread->status == THREADSTATUS_WAIT_ARB) { | 249 | thread->status == THREADSTATUS_WAIT_SYNCH_ALL || thread->status == THREADSTATUS_WAIT_ARB) { |
| 241 | thread->wait_set_output = false; | 250 | |
| 251 | // Invoke the wakeup callback before clearing the wait objects | ||
| 252 | if (thread->wakeup_callback) | ||
| 253 | thread->wakeup_callback(ThreadWakeupReason::Timeout, thread, nullptr); | ||
| 254 | |||
| 242 | // Remove the thread from each of its waiting objects' waitlists | 255 | // Remove the thread from each of its waiting objects' waitlists |
| 243 | for (auto& object : thread->wait_objects) | 256 | for (auto& object : thread->wait_objects) |
| 244 | object->RemoveWaitingThread(thread.get()); | 257 | object->RemoveWaitingThread(thread.get()); |
| 245 | thread->wait_objects.clear(); | 258 | thread->wait_objects.clear(); |
| 246 | thread->SetWaitSynchronizationResult(RESULT_TIMEOUT); | ||
| 247 | } | 259 | } |
| 248 | 260 | ||
| 249 | thread->ResumeFromWait(); | 261 | thread->ResumeFromWait(); |
| @@ -269,6 +281,9 @@ void Thread::ResumeFromWait() { | |||
| 269 | break; | 281 | break; |
| 270 | 282 | ||
| 271 | case THREADSTATUS_READY: | 283 | case THREADSTATUS_READY: |
| 284 | // The thread's wakeup callback must have already been cleared when the thread was first | ||
| 285 | // awoken. | ||
| 286 | ASSERT(wakeup_callback == nullptr); | ||
| 272 | // If the thread is waiting on multiple wait objects, it might be awoken more than once | 287 | // If the thread is waiting on multiple wait objects, it might be awoken more than once |
| 273 | // before actually resuming. We can ignore subsequent wakeups if the thread status has | 288 | // before actually resuming. We can ignore subsequent wakeups if the thread status has |
| 274 | // already been set to THREADSTATUS_READY. | 289 | // already been set to THREADSTATUS_READY. |
| @@ -284,6 +299,8 @@ void Thread::ResumeFromWait() { | |||
| 284 | return; | 299 | return; |
| 285 | } | 300 | } |
| 286 | 301 | ||
| 302 | wakeup_callback = nullptr; | ||
| 303 | |||
| 287 | ready_queue.push_back(current_priority, this); | 304 | ready_queue.push_back(current_priority, this); |
| 288 | status = THREADSTATUS_READY; | 305 | status = THREADSTATUS_READY; |
| 289 | Core::System::GetInstance().PrepareReschedule(); | 306 | Core::System::GetInstance().PrepareReschedule(); |
| @@ -302,7 +319,7 @@ static void DebugThreadQueue() { | |||
| 302 | } | 319 | } |
| 303 | 320 | ||
| 304 | for (auto& t : thread_list) { | 321 | for (auto& t : thread_list) { |
| 305 | s32 priority = ready_queue.contains(t.get()); | 322 | u32 priority = ready_queue.contains(t.get()); |
| 306 | if (priority != -1) { | 323 | if (priority != -1) { |
| 307 | LOG_DEBUG(Kernel, "0x%02X %u", priority, t->GetObjectId()); | 324 | LOG_DEBUG(Kernel, "0x%02X %u", priority, t->GetObjectId()); |
| 308 | } | 325 | } |
| @@ -352,7 +369,8 @@ static void ResetThreadContext(ARM_Interface::ThreadContext& context, VAddr stac | |||
| 352 | } | 369 | } |
| 353 | 370 | ||
| 354 | ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, u32 priority, | 371 | ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, u32 priority, |
| 355 | u32 arg, s32 processor_id, VAddr stack_top) { | 372 | u32 arg, s32 processor_id, VAddr stack_top, |
| 373 | SharedPtr<Process> owner_process) { | ||
| 356 | // Check if priority is in ranged. Lowest priority -> highest priority id. | 374 | // Check if priority is in ranged. Lowest priority -> highest priority id. |
| 357 | if (priority > THREADPRIO_LOWEST) { | 375 | if (priority > THREADPRIO_LOWEST) { |
| 358 | LOG_ERROR(Kernel_SVC, "Invalid thread priority: %d", priority); | 376 | LOG_ERROR(Kernel_SVC, "Invalid thread priority: %d", priority); |
| @@ -366,7 +384,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, | |||
| 366 | 384 | ||
| 367 | // TODO(yuriks): Other checks, returning 0xD9001BEA | 385 | // TODO(yuriks): Other checks, returning 0xD9001BEA |
| 368 | 386 | ||
| 369 | if (!Memory::IsValidVirtualAddress(entry_point)) { | 387 | if (!Memory::IsValidVirtualAddress(*owner_process, entry_point)) { |
| 370 | LOG_ERROR(Kernel_SVC, "(name=%s): invalid entry %08x", name.c_str(), entry_point); | 388 | LOG_ERROR(Kernel_SVC, "(name=%s): invalid entry %08x", name.c_str(), entry_point); |
| 371 | // TODO: Verify error | 389 | // TODO: Verify error |
| 372 | return ResultCode(ErrorDescription::InvalidAddress, ErrorModule::Kernel, | 390 | return ResultCode(ErrorDescription::InvalidAddress, ErrorModule::Kernel, |
| @@ -385,15 +403,14 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, | |||
| 385 | thread->nominal_priority = thread->current_priority = priority; | 403 | thread->nominal_priority = thread->current_priority = priority; |
| 386 | thread->last_running_ticks = CoreTiming::GetTicks(); | 404 | thread->last_running_ticks = CoreTiming::GetTicks(); |
| 387 | thread->processor_id = processor_id; | 405 | thread->processor_id = processor_id; |
| 388 | thread->wait_set_output = false; | ||
| 389 | thread->wait_objects.clear(); | 406 | thread->wait_objects.clear(); |
| 390 | thread->wait_address = 0; | 407 | thread->wait_address = 0; |
| 391 | thread->name = std::move(name); | 408 | thread->name = std::move(name); |
| 392 | thread->callback_handle = wakeup_callback_handle_table.Create(thread).Unwrap(); | 409 | thread->callback_handle = wakeup_callback_handle_table.Create(thread).Unwrap(); |
| 393 | thread->owner_process = g_current_process; | 410 | thread->owner_process = owner_process; |
| 394 | 411 | ||
| 395 | // Find the next available TLS index, and mark it as used | 412 | // Find the next available TLS index, and mark it as used |
| 396 | auto& tls_slots = Kernel::g_current_process->tls_slots; | 413 | auto& tls_slots = owner_process->tls_slots; |
| 397 | bool needs_allocation = true; | 414 | bool needs_allocation = true; |
| 398 | u32 available_page; // Which allocated page has free space | 415 | u32 available_page; // Which allocated page has free space |
| 399 | u32 available_slot; // Which slot within the page is free | 416 | u32 available_slot; // Which slot within the page is free |
| @@ -412,18 +429,18 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, | |||
| 412 | return ERR_OUT_OF_MEMORY; | 429 | return ERR_OUT_OF_MEMORY; |
| 413 | } | 430 | } |
| 414 | 431 | ||
| 415 | u32 offset = linheap_memory->size(); | 432 | size_t offset = linheap_memory->size(); |
| 416 | 433 | ||
| 417 | // Allocate some memory from the end of the linear heap for this region. | 434 | // Allocate some memory from the end of the linear heap for this region. |
| 418 | linheap_memory->insert(linheap_memory->end(), Memory::PAGE_SIZE, 0); | 435 | linheap_memory->insert(linheap_memory->end(), Memory::PAGE_SIZE, 0); |
| 419 | memory_region->used += Memory::PAGE_SIZE; | 436 | memory_region->used += Memory::PAGE_SIZE; |
| 420 | Kernel::g_current_process->linear_heap_used += Memory::PAGE_SIZE; | 437 | owner_process->linear_heap_used += Memory::PAGE_SIZE; |
| 421 | 438 | ||
| 422 | tls_slots.emplace_back(0); // The page is completely available at the start | 439 | tls_slots.emplace_back(0); // The page is completely available at the start |
| 423 | available_page = tls_slots.size() - 1; | 440 | available_page = static_cast<u32>(tls_slots.size() - 1); |
| 424 | available_slot = 0; // Use the first slot in the new page | 441 | available_slot = 0; // Use the first slot in the new page |
| 425 | 442 | ||
| 426 | auto& vm_manager = Kernel::g_current_process->vm_manager; | 443 | auto& vm_manager = owner_process->vm_manager; |
| 427 | vm_manager.RefreshMemoryBlockMappings(linheap_memory.get()); | 444 | vm_manager.RefreshMemoryBlockMappings(linheap_memory.get()); |
| 428 | 445 | ||
| 429 | // Map the page to the current process' address space. | 446 | // Map the page to the current process' address space. |
| @@ -447,7 +464,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, | |||
| 447 | return MakeResult<SharedPtr<Thread>>(std::move(thread)); | 464 | return MakeResult<SharedPtr<Thread>>(std::move(thread)); |
| 448 | } | 465 | } |
| 449 | 466 | ||
| 450 | void Thread::SetPriority(s32 priority) { | 467 | void Thread::SetPriority(u32 priority) { |
| 451 | ASSERT_MSG(priority <= THREADPRIO_LOWEST && priority >= THREADPRIO_HIGHEST, | 468 | ASSERT_MSG(priority <= THREADPRIO_LOWEST && priority >= THREADPRIO_HIGHEST, |
| 452 | "Invalid priority value."); | 469 | "Invalid priority value."); |
| 453 | // If thread was ready, adjust queues | 470 | // If thread was ready, adjust queues |
| @@ -460,7 +477,7 @@ void Thread::SetPriority(s32 priority) { | |||
| 460 | } | 477 | } |
| 461 | 478 | ||
| 462 | void Thread::UpdatePriority() { | 479 | void Thread::UpdatePriority() { |
| 463 | s32 best_priority = nominal_priority; | 480 | u32 best_priority = nominal_priority; |
| 464 | for (auto& mutex : held_mutexes) { | 481 | for (auto& mutex : held_mutexes) { |
| 465 | if (mutex->priority < best_priority) | 482 | if (mutex->priority < best_priority) |
| 466 | best_priority = mutex->priority; | 483 | best_priority = mutex->priority; |
| @@ -468,7 +485,7 @@ void Thread::UpdatePriority() { | |||
| 468 | BoostPriority(best_priority); | 485 | BoostPriority(best_priority); |
| 469 | } | 486 | } |
| 470 | 487 | ||
| 471 | void Thread::BoostPriority(s32 priority) { | 488 | void Thread::BoostPriority(u32 priority) { |
| 472 | // If thread was ready, adjust queues | 489 | // If thread was ready, adjust queues |
| 473 | if (status == THREADSTATUS_READY) | 490 | if (status == THREADSTATUS_READY) |
| 474 | ready_queue.move(this, current_priority, priority); | 491 | ready_queue.move(this, current_priority, priority); |
| @@ -477,21 +494,20 @@ void Thread::BoostPriority(s32 priority) { | |||
| 477 | current_priority = priority; | 494 | current_priority = priority; |
| 478 | } | 495 | } |
| 479 | 496 | ||
| 480 | SharedPtr<Thread> SetupMainThread(VAddr entry_point, s32 priority) { | 497 | SharedPtr<Thread> SetupMainThread(u32 entry_point, u32 priority, SharedPtr<Process> owner_process) { |
| 481 | DEBUG_ASSERT(!GetCurrentThread()); | 498 | // Setup page table so we can write to memory |
| 499 | SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); | ||
| 482 | 500 | ||
| 483 | // Initialize new "main" thread | 501 | // Initialize new "main" thread |
| 484 | auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0, | 502 | auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0, |
| 485 | Memory::HEAP_VADDR_END); | 503 | Memory::HEAP_VADDR_END, owner_process); |
| 486 | 504 | ||
| 487 | SharedPtr<Thread> thread = std::move(thread_res).Unwrap(); | 505 | SharedPtr<Thread> thread = std::move(thread_res).Unwrap(); |
| 488 | 506 | ||
| 489 | thread->context.fpscr = | 507 | thread->context.fpscr = |
| 490 | FPSCR_DEFAULT_NAN | FPSCR_FLUSH_TO_ZERO | FPSCR_ROUND_TOZERO | FPSCR_IXC; // 0x03C00010 | 508 | FPSCR_DEFAULT_NAN | FPSCR_FLUSH_TO_ZERO | FPSCR_ROUND_TOZERO | FPSCR_IXC; // 0x03C00010 |
| 491 | 509 | ||
| 492 | // Run new "main" thread | 510 | // Note: The newly created thread will be run when the scheduler fires. |
| 493 | SwitchContext(thread.get()); | ||
| 494 | |||
| 495 | return thread; | 511 | return thread; |
| 496 | } | 512 | } |
| 497 | 513 | ||
| @@ -525,7 +541,13 @@ void Thread::SetWaitSynchronizationOutput(s32 output) { | |||
| 525 | s32 Thread::GetWaitObjectIndex(WaitObject* object) const { | 541 | s32 Thread::GetWaitObjectIndex(WaitObject* object) const { |
| 526 | ASSERT_MSG(!wait_objects.empty(), "Thread is not waiting for anything"); | 542 | ASSERT_MSG(!wait_objects.empty(), "Thread is not waiting for anything"); |
| 527 | auto match = std::find(wait_objects.rbegin(), wait_objects.rend(), object); | 543 | auto match = std::find(wait_objects.rbegin(), wait_objects.rend(), object); |
| 528 | return std::distance(match, wait_objects.rend()) - 1; | 544 | return static_cast<s32>(std::distance(match, wait_objects.rend()) - 1); |
| 545 | } | ||
| 546 | |||
| 547 | VAddr Thread::GetCommandBufferAddress() const { | ||
| 548 | // Offset from the start of TLS at which the IPC command buffer begins. | ||
| 549 | static constexpr int CommandHeaderOffset = 0x80; | ||
| 550 | return GetTLSAddress() + CommandHeaderOffset; | ||
| 529 | } | 551 | } |
| 530 | 552 | ||
| 531 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 553 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index 2cadb91db..fafcab156 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h | |||
| @@ -15,7 +15,7 @@ | |||
| 15 | #include "core/hle/kernel/wait_object.h" | 15 | #include "core/hle/kernel/wait_object.h" |
| 16 | #include "core/hle/result.h" | 16 | #include "core/hle/result.h" |
| 17 | 17 | ||
| 18 | enum ThreadPriority : s32 { | 18 | enum ThreadPriority : u32 { |
| 19 | THREADPRIO_HIGHEST = 0, ///< Highest thread priority | 19 | THREADPRIO_HIGHEST = 0, ///< Highest thread priority |
| 20 | THREADPRIO_USERLAND_MAX = 24, ///< Highest thread priority for userland apps | 20 | THREADPRIO_USERLAND_MAX = 24, ///< Highest thread priority for userland apps |
| 21 | THREADPRIO_DEFAULT = 48, ///< Default thread priority for userland apps | 21 | THREADPRIO_DEFAULT = 48, ///< Default thread priority for userland apps |
| @@ -41,6 +41,11 @@ enum ThreadStatus { | |||
| 41 | THREADSTATUS_DEAD ///< Run to completion, or forcefully terminated | 41 | THREADSTATUS_DEAD ///< Run to completion, or forcefully terminated |
| 42 | }; | 42 | }; |
| 43 | 43 | ||
| 44 | enum class ThreadWakeupReason { | ||
| 45 | Signal, // The thread was woken up by WakeupAllWaitingThreads due to an object signal. | ||
| 46 | Timeout // The thread was woken up due to a wait timeout. | ||
| 47 | }; | ||
| 48 | |||
| 44 | namespace Kernel { | 49 | namespace Kernel { |
| 45 | 50 | ||
| 46 | class Mutex; | 51 | class Mutex; |
| @@ -56,10 +61,12 @@ public: | |||
| 56 | * @param arg User data to pass to the thread | 61 | * @param arg User data to pass to the thread |
| 57 | * @param processor_id The ID(s) of the processors on which the thread is desired to be run | 62 | * @param processor_id The ID(s) of the processors on which the thread is desired to be run |
| 58 | * @param stack_top The address of the thread's stack top | 63 | * @param stack_top The address of the thread's stack top |
| 64 | * @param owner_process The parent process for the thread | ||
| 59 | * @return A shared pointer to the newly created thread | 65 | * @return A shared pointer to the newly created thread |
| 60 | */ | 66 | */ |
| 61 | static ResultVal<SharedPtr<Thread>> Create(std::string name, VAddr entry_point, u32 priority, | 67 | static ResultVal<SharedPtr<Thread>> Create(std::string name, VAddr entry_point, u32 priority, |
| 62 | u32 arg, s32 processor_id, VAddr stack_top); | 68 | u32 arg, s32 processor_id, VAddr stack_top, |
| 69 | SharedPtr<Process> owner_process); | ||
| 63 | 70 | ||
| 64 | std::string GetName() const override { | 71 | std::string GetName() const override { |
| 65 | return name; | 72 | return name; |
| @@ -80,7 +87,7 @@ public: | |||
| 80 | * Gets the thread's current priority | 87 | * Gets the thread's current priority |
| 81 | * @return The current thread's priority | 88 | * @return The current thread's priority |
| 82 | */ | 89 | */ |
| 83 | s32 GetPriority() const { | 90 | u32 GetPriority() const { |
| 84 | return current_priority; | 91 | return current_priority; |
| 85 | } | 92 | } |
| 86 | 93 | ||
| @@ -88,7 +95,7 @@ public: | |||
| 88 | * Sets the thread's current priority | 95 | * Sets the thread's current priority |
| 89 | * @param priority The new priority | 96 | * @param priority The new priority |
| 90 | */ | 97 | */ |
| 91 | void SetPriority(s32 priority); | 98 | void SetPriority(u32 priority); |
| 92 | 99 | ||
| 93 | /** | 100 | /** |
| 94 | * Boost's a thread's priority to the best priority among the thread's held mutexes. | 101 | * Boost's a thread's priority to the best priority among the thread's held mutexes. |
| @@ -100,7 +107,7 @@ public: | |||
| 100 | * Temporarily boosts the thread's priority until the next time it is scheduled | 107 | * Temporarily boosts the thread's priority until the next time it is scheduled |
| 101 | * @param priority The new priority | 108 | * @param priority The new priority |
| 102 | */ | 109 | */ |
| 103 | void BoostPriority(s32 priority); | 110 | void BoostPriority(u32 priority); |
| 104 | 111 | ||
| 105 | /** | 112 | /** |
| 106 | * Gets the thread's thread ID | 113 | * Gets the thread's thread ID |
| @@ -116,9 +123,9 @@ public: | |||
| 116 | void ResumeFromWait(); | 123 | void ResumeFromWait(); |
| 117 | 124 | ||
| 118 | /** | 125 | /** |
| 119 | * Schedules an event to wake up the specified thread after the specified delay | 126 | * Schedules an event to wake up the specified thread after the specified delay |
| 120 | * @param nanoseconds The time this thread will be allowed to sleep for | 127 | * @param nanoseconds The time this thread will be allowed to sleep for |
| 121 | */ | 128 | */ |
| 122 | void WakeAfterDelay(s64 nanoseconds); | 129 | void WakeAfterDelay(s64 nanoseconds); |
| 123 | 130 | ||
| 124 | /** | 131 | /** |
| @@ -157,6 +164,12 @@ public: | |||
| 157 | return tls_address; | 164 | return tls_address; |
| 158 | } | 165 | } |
| 159 | 166 | ||
| 167 | /* | ||
| 168 | * Returns the address of the current thread's command buffer, located in the TLS. | ||
| 169 | * @returns VAddr of the thread's command buffer. | ||
| 170 | */ | ||
| 171 | VAddr GetCommandBufferAddress() const; | ||
| 172 | |||
| 160 | /** | 173 | /** |
| 161 | * Returns whether this thread is waiting for all the objects in | 174 | * Returns whether this thread is waiting for all the objects in |
| 162 | * its wait list to become ready, as a result of a WaitSynchronizationN call | 175 | * its wait list to become ready, as a result of a WaitSynchronizationN call |
| @@ -174,8 +187,8 @@ public: | |||
| 174 | VAddr entry_point; | 187 | VAddr entry_point; |
| 175 | VAddr stack_top; | 188 | VAddr stack_top; |
| 176 | 189 | ||
| 177 | s32 nominal_priority; ///< Nominal thread priority, as set by the emulated application | 190 | u32 nominal_priority; ///< Nominal thread priority, as set by the emulated application |
| 178 | s32 current_priority; ///< Current thread priority, can be temporarily changed | 191 | u32 current_priority; ///< Current thread priority, can be temporarily changed |
| 179 | 192 | ||
| 180 | u64 last_running_ticks; ///< CPU tick when thread was last running | 193 | u64 last_running_ticks; ///< CPU tick when thread was last running |
| 181 | 194 | ||
| @@ -197,14 +210,18 @@ public: | |||
| 197 | 210 | ||
| 198 | VAddr wait_address; ///< If waiting on an AddressArbiter, this is the arbitration address | 211 | VAddr wait_address; ///< If waiting on an AddressArbiter, this is the arbitration address |
| 199 | 212 | ||
| 200 | /// True if the WaitSynchronizationN output parameter should be set on thread wakeup. | ||
| 201 | bool wait_set_output; | ||
| 202 | |||
| 203 | std::string name; | 213 | std::string name; |
| 204 | 214 | ||
| 205 | /// Handle used as userdata to reference this object when inserting into the CoreTiming queue. | 215 | /// Handle used as userdata to reference this object when inserting into the CoreTiming queue. |
| 206 | Handle callback_handle; | 216 | Handle callback_handle; |
| 207 | 217 | ||
| 218 | using WakeupCallback = void(ThreadWakeupReason reason, SharedPtr<Thread> thread, | ||
| 219 | SharedPtr<WaitObject> object); | ||
| 220 | // Callback that will be invoked when the thread is resumed from a waiting state. If the thread | ||
| 221 | // was waiting via WaitSynchronizationN then the object will be the last object that became | ||
| 222 | // available. In case of a timeout, the object will be nullptr. | ||
| 223 | std::function<WakeupCallback> wakeup_callback; | ||
| 224 | |||
| 208 | private: | 225 | private: |
| 209 | Thread(); | 226 | Thread(); |
| 210 | ~Thread() override; | 227 | ~Thread() override; |
| @@ -214,9 +231,10 @@ private: | |||
| 214 | * Sets up the primary application thread | 231 | * Sets up the primary application thread |
| 215 | * @param entry_point The address at which the thread should start execution | 232 | * @param entry_point The address at which the thread should start execution |
| 216 | * @param priority The priority to give the main thread | 233 | * @param priority The priority to give the main thread |
| 234 | * @param owner_process The parent process for the main thread | ||
| 217 | * @return A shared pointer to the main thread | 235 | * @return A shared pointer to the main thread |
| 218 | */ | 236 | */ |
| 219 | SharedPtr<Thread> SetupMainThread(VAddr entry_point, s32 priority); | 237 | SharedPtr<Thread> SetupMainThread(u32 entry_point, u32 priority, SharedPtr<Process> owner_process); |
| 220 | 238 | ||
| 221 | /** | 239 | /** |
| 222 | * Returns whether there are any threads that are ready to run. | 240 | * Returns whether there are any threads that are ready to run. |
| @@ -276,4 +294,4 @@ void ThreadingShutdown(); | |||
| 276 | */ | 294 | */ |
| 277 | const std::vector<SharedPtr<Thread>>& GetThreadList(); | 295 | const std::vector<SharedPtr<Thread>>& GetThreadList(); |
| 278 | 296 | ||
| 279 | } // namespace | 297 | } // namespace Kernel |
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index f70c32501..9762ef535 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp | |||
| @@ -4,8 +4,10 @@ | |||
| 4 | 4 | ||
| 5 | #include <iterator> | 5 | #include <iterator> |
| 6 | #include "common/assert.h" | 6 | #include "common/assert.h" |
| 7 | #include "core/arm/arm_interface.h" | ||
| 7 | #include "core/hle/kernel/errors.h" | 8 | #include "core/hle/kernel/errors.h" |
| 8 | #include "core/hle/kernel/vm_manager.h" | 9 | #include "core/hle/kernel/vm_manager.h" |
| 10 | #include "core/core.h" | ||
| 9 | #include "core/memory.h" | 11 | #include "core/memory.h" |
| 10 | #include "core/memory_setup.h" | 12 | #include "core/memory_setup.h" |
| 11 | #include "core/mmio.h" | 13 | #include "core/mmio.h" |
| @@ -56,6 +58,10 @@ void VMManager::Reset() { | |||
| 56 | initial_vma.size = MAX_ADDRESS; | 58 | initial_vma.size = MAX_ADDRESS; |
| 57 | vma_map.emplace(initial_vma.base, initial_vma); | 59 | vma_map.emplace(initial_vma.base, initial_vma); |
| 58 | 60 | ||
| 61 | page_table.pointers.fill(nullptr); | ||
| 62 | page_table.attributes.fill(Memory::PageType::Unmapped); | ||
| 63 | page_table.cached_res_count.fill(0); | ||
| 64 | |||
| 59 | //UpdatePageTableForVMA(initial_vma); | 65 | //UpdatePageTableForVMA(initial_vma); |
| 60 | } | 66 | } |
| 61 | 67 | ||
| @@ -79,6 +85,8 @@ ResultVal<VMManager::VMAHandle> VMManager::MapMemoryBlock(VAddr target, | |||
| 79 | VirtualMemoryArea& final_vma = vma_handle->second; | 85 | VirtualMemoryArea& final_vma = vma_handle->second; |
| 80 | ASSERT(final_vma.size == size); | 86 | ASSERT(final_vma.size == size); |
| 81 | 87 | ||
| 88 | Core::CPU().MapBackingMemory(target, size, block->data() + offset, VMAPermission::ReadWriteExecute); | ||
| 89 | |||
| 82 | final_vma.type = VMAType::AllocatedMemoryBlock; | 90 | final_vma.type = VMAType::AllocatedMemoryBlock; |
| 83 | final_vma.permissions = VMAPermission::ReadWrite; | 91 | final_vma.permissions = VMAPermission::ReadWrite; |
| 84 | final_vma.meminfo_state = state; | 92 | final_vma.meminfo_state = state; |
| @@ -98,6 +106,8 @@ ResultVal<VMManager::VMAHandle> VMManager::MapBackingMemory(VAddr target, u8* me | |||
| 98 | VirtualMemoryArea& final_vma = vma_handle->second; | 106 | VirtualMemoryArea& final_vma = vma_handle->second; |
| 99 | ASSERT(final_vma.size == size); | 107 | ASSERT(final_vma.size == size); |
| 100 | 108 | ||
| 109 | Core::CPU().MapBackingMemory(target, size, memory, VMAPermission::ReadWriteExecute); | ||
| 110 | |||
| 101 | final_vma.type = VMAType::BackingMemory; | 111 | final_vma.type = VMAType::BackingMemory; |
| 102 | final_vma.permissions = VMAPermission::ReadWrite; | 112 | final_vma.permissions = VMAPermission::ReadWrite; |
| 103 | final_vma.meminfo_state = state; | 113 | final_vma.meminfo_state = state; |
| @@ -328,16 +338,17 @@ VMManager::VMAIter VMManager::MergeAdjacent(VMAIter iter) { | |||
| 328 | void VMManager::UpdatePageTableForVMA(const VirtualMemoryArea& vma) { | 338 | void VMManager::UpdatePageTableForVMA(const VirtualMemoryArea& vma) { |
| 329 | switch (vma.type) { | 339 | switch (vma.type) { |
| 330 | case VMAType::Free: | 340 | case VMAType::Free: |
| 331 | Memory::UnmapRegion(vma.base, vma.size); | 341 | Memory::UnmapRegion(page_table, vma.base, vma.size); |
| 332 | break; | 342 | break; |
| 333 | case VMAType::AllocatedMemoryBlock: | 343 | case VMAType::AllocatedMemoryBlock: |
| 334 | Memory::MapMemoryRegion(vma.base, vma.size, vma.backing_block->data() + vma.offset); | 344 | Memory::MapMemoryRegion(page_table, vma.base, vma.size, |
| 345 | vma.backing_block->data() + vma.offset); | ||
| 335 | break; | 346 | break; |
| 336 | case VMAType::BackingMemory: | 347 | case VMAType::BackingMemory: |
| 337 | Memory::MapMemoryRegion(vma.base, vma.size, vma.backing_memory); | 348 | Memory::MapMemoryRegion(page_table, vma.base, vma.size, vma.backing_memory); |
| 338 | break; | 349 | break; |
| 339 | case VMAType::MMIO: | 350 | case VMAType::MMIO: |
| 340 | Memory::MapIoRegion(vma.base, vma.size, vma.mmio_handler); | 351 | Memory::MapIoRegion(page_table, vma.base, vma.size, vma.mmio_handler); |
| 341 | break; | 352 | break; |
| 342 | } | 353 | } |
| 343 | } | 354 | } |
diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index aa2265ce6..cb5bb8243 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <vector> | 9 | #include <vector> |
| 10 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 11 | #include "core/hle/result.h" | 11 | #include "core/hle/result.h" |
| 12 | #include "core/memory.h" | ||
| 12 | #include "core/mmio.h" | 13 | #include "core/mmio.h" |
| 13 | 14 | ||
| 14 | namespace Kernel { | 15 | namespace Kernel { |
| @@ -102,7 +103,6 @@ struct VirtualMemoryArea { | |||
| 102 | * - http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files/ | 103 | * - http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files/ |
| 103 | */ | 104 | */ |
| 104 | class VMManager final { | 105 | class VMManager final { |
| 105 | // TODO(yuriks): Make page tables switchable to support multiple VMManagers | ||
| 106 | public: | 106 | public: |
| 107 | /** | 107 | /** |
| 108 | * The maximum amount of address space managed by the kernel. Addresses above this are never | 108 | * The maximum amount of address space managed by the kernel. Addresses above this are never |
| @@ -184,6 +184,10 @@ public: | |||
| 184 | /// Dumps the address space layout to the log, for debugging | 184 | /// Dumps the address space layout to the log, for debugging |
| 185 | void LogLayout(Log::Level log_level) const; | 185 | void LogLayout(Log::Level log_level) const; |
| 186 | 186 | ||
| 187 | /// Each VMManager has its own page table, which is set as the main one when the owning process | ||
| 188 | /// is scheduled. | ||
| 189 | Memory::PageTable page_table; | ||
| 190 | |||
| 187 | private: | 191 | private: |
| 188 | using VMAIter = decltype(vma_map)::iterator; | 192 | using VMAIter = decltype(vma_map)::iterator; |
| 189 | 193 | ||
diff --git a/src/core/hle/kernel/wait_object.cpp b/src/core/hle/kernel/wait_object.cpp index f245eda6c..469554908 100644 --- a/src/core/hle/kernel/wait_object.cpp +++ b/src/core/hle/kernel/wait_object.cpp | |||
| @@ -34,7 +34,7 @@ void WaitObject::RemoveWaitingThread(Thread* thread) { | |||
| 34 | 34 | ||
| 35 | SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() { | 35 | SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() { |
| 36 | Thread* candidate = nullptr; | 36 | Thread* candidate = nullptr; |
| 37 | s32 candidate_priority = THREADPRIO_LOWEST + 1; | 37 | u32 candidate_priority = THREADPRIO_LOWEST + 1; |
| 38 | 38 | ||
| 39 | for (const auto& thread : waiting_threads) { | 39 | for (const auto& thread : waiting_threads) { |
| 40 | // The list of waiting threads must not contain threads that are not waiting to be awakened. | 40 | // The list of waiting threads must not contain threads that are not waiting to be awakened. |
| @@ -71,23 +71,20 @@ void WaitObject::WakeupAllWaitingThreads() { | |||
| 71 | while (auto thread = GetHighestPriorityReadyThread()) { | 71 | while (auto thread = GetHighestPriorityReadyThread()) { |
| 72 | if (!thread->IsSleepingOnWaitAll()) { | 72 | if (!thread->IsSleepingOnWaitAll()) { |
| 73 | Acquire(thread.get()); | 73 | Acquire(thread.get()); |
| 74 | // Set the output index of the WaitSynchronizationN call to the index of this object. | ||
| 75 | if (thread->wait_set_output) { | ||
| 76 | thread->SetWaitSynchronizationOutput(thread->GetWaitObjectIndex(this)); | ||
| 77 | thread->wait_set_output = false; | ||
| 78 | } | ||
| 79 | } else { | 74 | } else { |
| 80 | for (auto& object : thread->wait_objects) { | 75 | for (auto& object : thread->wait_objects) { |
| 81 | object->Acquire(thread.get()); | 76 | object->Acquire(thread.get()); |
| 82 | } | 77 | } |
| 83 | // Note: This case doesn't update the output index of WaitSynchronizationN. | ||
| 84 | } | 78 | } |
| 85 | 79 | ||
| 80 | // Invoke the wakeup callback before clearing the wait objects | ||
| 81 | if (thread->wakeup_callback) | ||
| 82 | thread->wakeup_callback(ThreadWakeupReason::Signal, thread, this); | ||
| 83 | |||
| 86 | for (auto& object : thread->wait_objects) | 84 | for (auto& object : thread->wait_objects) |
| 87 | object->RemoveWaitingThread(thread.get()); | 85 | object->RemoveWaitingThread(thread.get()); |
| 88 | thread->wait_objects.clear(); | 86 | thread->wait_objects.clear(); |
| 89 | 87 | ||
| 90 | thread->SetWaitSynchronizationResult(RESULT_SUCCESS); | ||
| 91 | thread->ResumeFromWait(); | 88 | thread->ResumeFromWait(); |
| 92 | } | 89 | } |
| 93 | } | 90 | } |
diff --git a/src/core/hle/lock.cpp b/src/core/hle/lock.cpp new file mode 100644 index 000000000..1c24c7ce9 --- /dev/null +++ b/src/core/hle/lock.cpp | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <core/hle/lock.h> | ||
| 8 | |||
| 9 | namespace HLE { | ||
| 10 | std::recursive_mutex g_hle_lock; | ||
| 11 | } | ||
diff --git a/src/core/hle/lock.h b/src/core/hle/lock.h new file mode 100644 index 000000000..5c99fe996 --- /dev/null +++ b/src/core/hle/lock.h | |||
| @@ -0,0 +1,18 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <mutex> | ||
| 8 | |||
| 9 | namespace HLE { | ||
| 10 | /* | ||
| 11 | * Synchronizes access to the internal HLE kernel structures, it is acquired when a guest | ||
| 12 | * application thread performs a syscall. It should be acquired by any host threads that read or | ||
| 13 | * modify the HLE kernel state. Note: Any operation that directly or indirectly reads from or writes | ||
| 14 | * to the emulated memory is not protected by this mutex, and should be avoided in any threads other | ||
| 15 | * than the CPU thread. | ||
| 16 | */ | ||
| 17 | extern std::recursive_mutex g_hle_lock; | ||
| 18 | } // namespace HLE | ||
diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 5c44b43bb..912ab550d 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <boost/optional.hpp> | ||
| 5 | #include "common/common_paths.h" | 6 | #include "common/common_paths.h" |
| 6 | #include "common/file_util.h" | 7 | #include "common/file_util.h" |
| 7 | #include "common/logging/log.h" | 8 | #include "common/logging/log.h" |
| @@ -18,6 +19,7 @@ | |||
| 18 | #include "core/hle/service/apt/apt_s.h" | 19 | #include "core/hle/service/apt/apt_s.h" |
| 19 | #include "core/hle/service/apt/apt_u.h" | 20 | #include "core/hle/service/apt/apt_u.h" |
| 20 | #include "core/hle/service/apt/bcfnt/bcfnt.h" | 21 | #include "core/hle/service/apt/bcfnt/bcfnt.h" |
| 22 | #include "core/hle/service/cfg/cfg.h" | ||
| 21 | #include "core/hle/service/fs/archive.h" | 23 | #include "core/hle/service/fs/archive.h" |
| 22 | #include "core/hle/service/ptm/ptm.h" | 24 | #include "core/hle/service/ptm/ptm.h" |
| 23 | #include "core/hle/service/service.h" | 25 | #include "core/hle/service/service.h" |
| @@ -33,8 +35,6 @@ static bool shared_font_loaded = false; | |||
| 33 | static bool shared_font_relocated = false; | 35 | static bool shared_font_relocated = false; |
| 34 | 36 | ||
| 35 | static Kernel::SharedPtr<Kernel::Mutex> lock; | 37 | static Kernel::SharedPtr<Kernel::Mutex> lock; |
| 36 | static Kernel::SharedPtr<Kernel::Event> notification_event; ///< APT notification event | ||
| 37 | static Kernel::SharedPtr<Kernel::Event> parameter_event; ///< APT parameter event | ||
| 38 | 38 | ||
| 39 | static u32 cpu_percent; ///< CPU time available to the running application | 39 | static u32 cpu_percent; ///< CPU time available to the running application |
| 40 | 40 | ||
| @@ -43,43 +43,344 @@ static u8 unknown_ns_state_field; | |||
| 43 | 43 | ||
| 44 | static ScreencapPostPermission screen_capture_post_permission; | 44 | static ScreencapPostPermission screen_capture_post_permission; |
| 45 | 45 | ||
| 46 | /// Parameter data to be returned in the next call to Glance/ReceiveParameter | 46 | /// Parameter data to be returned in the next call to Glance/ReceiveParameter. |
| 47 | static MessageParameter next_parameter; | 47 | /// TODO(Subv): Use std::optional once we migrate to C++17. |
| 48 | static boost::optional<MessageParameter> next_parameter; | ||
| 49 | |||
| 50 | enum class AppletPos { Application = 0, Library = 1, System = 2, SysLibrary = 3, Resident = 4 }; | ||
| 51 | |||
| 52 | static constexpr size_t NumAppletSlot = 4; | ||
| 53 | |||
| 54 | enum class AppletSlot : u8 { | ||
| 55 | Application, | ||
| 56 | SystemApplet, | ||
| 57 | HomeMenu, | ||
| 58 | LibraryApplet, | ||
| 59 | |||
| 60 | // An invalid tag | ||
| 61 | Error, | ||
| 62 | }; | ||
| 63 | |||
| 64 | union AppletAttributes { | ||
| 65 | u32 raw; | ||
| 66 | |||
| 67 | BitField<0, 3, u32> applet_pos; | ||
| 68 | BitField<29, 1, u32> is_home_menu; | ||
| 69 | |||
| 70 | AppletAttributes() : raw(0) {} | ||
| 71 | AppletAttributes(u32 attributes) : raw(attributes) {} | ||
| 72 | }; | ||
| 73 | |||
| 74 | struct AppletSlotData { | ||
| 75 | AppletId applet_id; | ||
| 76 | AppletSlot slot; | ||
| 77 | bool registered; | ||
| 78 | AppletAttributes attributes; | ||
| 79 | Kernel::SharedPtr<Kernel::Event> notification_event; | ||
| 80 | Kernel::SharedPtr<Kernel::Event> parameter_event; | ||
| 81 | }; | ||
| 82 | |||
| 83 | // Holds data about the concurrently running applets in the system. | ||
| 84 | static std::array<AppletSlotData, NumAppletSlot> applet_slots = {}; | ||
| 85 | |||
| 86 | // This overload returns nullptr if no applet with the specified id has been started. | ||
| 87 | static AppletSlotData* GetAppletSlotData(AppletId id) { | ||
| 88 | auto GetSlot = [](AppletSlot slot) -> AppletSlotData* { | ||
| 89 | return &applet_slots[static_cast<size_t>(slot)]; | ||
| 90 | }; | ||
| 91 | |||
| 92 | if (id == AppletId::Application) { | ||
| 93 | auto* slot = GetSlot(AppletSlot::Application); | ||
| 94 | if (slot->applet_id != AppletId::None) | ||
| 95 | return slot; | ||
| 96 | |||
| 97 | return nullptr; | ||
| 98 | } | ||
| 99 | |||
| 100 | if (id == AppletId::AnySystemApplet) { | ||
| 101 | auto* system_slot = GetSlot(AppletSlot::SystemApplet); | ||
| 102 | if (system_slot->applet_id != AppletId::None) | ||
| 103 | return system_slot; | ||
| 104 | |||
| 105 | // The Home Menu is also a system applet, but it lives in its own slot to be able to run | ||
| 106 | // concurrently with other system applets. | ||
| 107 | auto* home_slot = GetSlot(AppletSlot::HomeMenu); | ||
| 108 | if (home_slot->applet_id != AppletId::None) | ||
| 109 | return home_slot; | ||
| 110 | |||
| 111 | return nullptr; | ||
| 112 | } | ||
| 113 | |||
| 114 | if (id == AppletId::AnyLibraryApplet || id == AppletId::AnySysLibraryApplet) { | ||
| 115 | auto* slot = GetSlot(AppletSlot::LibraryApplet); | ||
| 116 | if (slot->applet_id == AppletId::None) | ||
| 117 | return nullptr; | ||
| 118 | |||
| 119 | u32 applet_pos = slot->attributes.applet_pos; | ||
| 120 | |||
| 121 | if (id == AppletId::AnyLibraryApplet && applet_pos == static_cast<u32>(AppletPos::Library)) | ||
| 122 | return slot; | ||
| 123 | |||
| 124 | if (id == AppletId::AnySysLibraryApplet && | ||
| 125 | applet_pos == static_cast<u32>(AppletPos::SysLibrary)) | ||
| 126 | return slot; | ||
| 127 | |||
| 128 | return nullptr; | ||
| 129 | } | ||
| 130 | |||
| 131 | if (id == AppletId::HomeMenu || id == AppletId::AlternateMenu) { | ||
| 132 | auto* slot = GetSlot(AppletSlot::HomeMenu); | ||
| 133 | if (slot->applet_id != AppletId::None) | ||
| 134 | return slot; | ||
| 135 | |||
| 136 | return nullptr; | ||
| 137 | } | ||
| 138 | |||
| 139 | for (auto& slot : applet_slots) { | ||
| 140 | if (slot.applet_id == id) | ||
| 141 | return &slot; | ||
| 142 | } | ||
| 143 | |||
| 144 | return nullptr; | ||
| 145 | } | ||
| 146 | |||
| 147 | static AppletSlotData* GetAppletSlotData(AppletAttributes attributes) { | ||
| 148 | // Mapping from AppletPos to AppletSlot | ||
| 149 | static constexpr std::array<AppletSlot, 6> applet_position_slots = { | ||
| 150 | AppletSlot::Application, AppletSlot::LibraryApplet, AppletSlot::SystemApplet, | ||
| 151 | AppletSlot::LibraryApplet, AppletSlot::Error, AppletSlot::LibraryApplet}; | ||
| 152 | |||
| 153 | u32 applet_pos = attributes.applet_pos; | ||
| 154 | if (applet_pos >= applet_position_slots.size()) | ||
| 155 | return nullptr; | ||
| 156 | |||
| 157 | AppletSlot slot = applet_position_slots[applet_pos]; | ||
| 158 | |||
| 159 | if (slot == AppletSlot::Error) | ||
| 160 | return nullptr; | ||
| 161 | |||
| 162 | // The Home Menu is a system applet, however, it has its own applet slot so that it can run | ||
| 163 | // concurrently with other system applets. | ||
| 164 | if (slot == AppletSlot::SystemApplet && attributes.is_home_menu) | ||
| 165 | return &applet_slots[static_cast<size_t>(AppletSlot::HomeMenu)]; | ||
| 166 | |||
| 167 | return &applet_slots[static_cast<size_t>(slot)]; | ||
| 168 | } | ||
| 48 | 169 | ||
| 49 | void SendParameter(const MessageParameter& parameter) { | 170 | void SendParameter(const MessageParameter& parameter) { |
| 50 | next_parameter = parameter; | 171 | next_parameter = parameter; |
| 51 | // Signal the event to let the application know that a new parameter is ready to be read | 172 | // Signal the event to let the receiver know that a new parameter is ready to be read |
| 52 | parameter_event->Signal(); | 173 | auto* const slot_data = GetAppletSlotData(static_cast<AppletId>(parameter.destination_id)); |
| 174 | if (slot_data == nullptr) { | ||
| 175 | LOG_DEBUG(Service_APT, "No applet was registered with the id %03X", | ||
| 176 | parameter.destination_id); | ||
| 177 | return; | ||
| 178 | } | ||
| 179 | |||
| 180 | slot_data->parameter_event->Signal(); | ||
| 53 | } | 181 | } |
| 54 | 182 | ||
| 55 | void Initialize(Service::Interface* self) { | 183 | void Initialize(Service::Interface* self) { |
| 56 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x2, 2, 0); // 0x20080 | 184 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x2, 2, 0); // 0x20080 |
| 57 | u32 app_id = rp.Pop<u32>(); | 185 | u32 app_id = rp.Pop<u32>(); |
| 58 | u32 flags = rp.Pop<u32>(); | 186 | u32 attributes = rp.Pop<u32>(); |
| 187 | |||
| 188 | LOG_DEBUG(Service_APT, "called app_id=0x%08X, attributes=0x%08X", app_id, attributes); | ||
| 189 | |||
| 190 | auto* const slot_data = GetAppletSlotData(attributes); | ||
| 191 | |||
| 192 | // Note: The real NS service does not check if the attributes value is valid before accessing | ||
| 193 | // the data in the array | ||
| 194 | ASSERT_MSG(slot_data, "Invalid application attributes"); | ||
| 195 | |||
| 196 | if (slot_data->registered) { | ||
| 197 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||
| 198 | rb.Push(ResultCode(ErrorDescription::AlreadyExists, ErrorModule::Applet, | ||
| 199 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 200 | return; | ||
| 201 | } | ||
| 202 | |||
| 203 | slot_data->applet_id = static_cast<AppletId>(app_id); | ||
| 204 | slot_data->attributes.raw = attributes; | ||
| 205 | |||
| 59 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 3); | 206 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 3); |
| 60 | rb.Push(RESULT_SUCCESS); | 207 | rb.Push(RESULT_SUCCESS); |
| 61 | rb.PushCopyHandles(Kernel::g_handle_table.Create(notification_event).Unwrap(), | 208 | rb.PushCopyHandles(Kernel::g_handle_table.Create(slot_data->notification_event).Unwrap(), |
| 62 | Kernel::g_handle_table.Create(parameter_event).Unwrap()); | 209 | Kernel::g_handle_table.Create(slot_data->parameter_event).Unwrap()); |
| 210 | |||
| 211 | if (slot_data->applet_id == AppletId::Application || | ||
| 212 | slot_data->applet_id == AppletId::HomeMenu) { | ||
| 213 | // Initialize the APT parameter to wake up the application. | ||
| 214 | next_parameter.emplace(); | ||
| 215 | next_parameter->signal = static_cast<u32>(SignalType::Wakeup); | ||
| 216 | next_parameter->sender_id = static_cast<u32>(AppletId::None); | ||
| 217 | next_parameter->destination_id = app_id; | ||
| 218 | // Not signaling the parameter event will cause the application (or Home Menu) to hang | ||
| 219 | // during startup. In the real console, it is usually the Kernel and Home Menu who cause NS | ||
| 220 | // to signal the HomeMenu and Application parameter events, respectively. | ||
| 221 | slot_data->parameter_event->Signal(); | ||
| 222 | } | ||
| 223 | } | ||
| 63 | 224 | ||
| 64 | // TODO(bunnei): Check if these events are cleared every time Initialize is called. | 225 | static u32 DecompressLZ11(const u8* in, u8* out) { |
| 65 | notification_event->Clear(); | 226 | u32_le decompressed_size; |
| 66 | parameter_event->Clear(); | 227 | memcpy(&decompressed_size, in, sizeof(u32)); |
| 228 | in += 4; | ||
| 229 | |||
| 230 | u8 type = decompressed_size & 0xFF; | ||
| 231 | ASSERT(type == 0x11); | ||
| 232 | decompressed_size >>= 8; | ||
| 67 | 233 | ||
| 68 | ASSERT_MSG((nullptr != lock), "Cannot initialize without lock"); | 234 | u32 current_out_size = 0; |
| 69 | lock->Release(); | 235 | u8 flags = 0, mask = 1; |
| 236 | while (current_out_size < decompressed_size) { | ||
| 237 | if (mask == 1) { | ||
| 238 | flags = *(in++); | ||
| 239 | mask = 0x80; | ||
| 240 | } else { | ||
| 241 | mask >>= 1; | ||
| 242 | } | ||
| 70 | 243 | ||
| 71 | LOG_DEBUG(Service_APT, "called app_id=0x%08X, flags=0x%08X", app_id, flags); | 244 | if (flags & mask) { |
| 245 | u8 byte1 = *(in++); | ||
| 246 | u32 length = byte1 >> 4; | ||
| 247 | u32 offset; | ||
| 248 | if (length == 0) { | ||
| 249 | u8 byte2 = *(in++); | ||
| 250 | u8 byte3 = *(in++); | ||
| 251 | length = (((byte1 & 0x0F) << 4) | (byte2 >> 4)) + 0x11; | ||
| 252 | offset = (((byte2 & 0x0F) << 8) | byte3) + 0x1; | ||
| 253 | } else if (length == 1) { | ||
| 254 | u8 byte2 = *(in++); | ||
| 255 | u8 byte3 = *(in++); | ||
| 256 | u8 byte4 = *(in++); | ||
| 257 | length = (((byte1 & 0x0F) << 12) | (byte2 << 4) | (byte3 >> 4)) + 0x111; | ||
| 258 | offset = (((byte3 & 0x0F) << 8) | byte4) + 0x1; | ||
| 259 | } else { | ||
| 260 | u8 byte2 = *(in++); | ||
| 261 | length = (byte1 >> 4) + 0x1; | ||
| 262 | offset = (((byte1 & 0x0F) << 8) | byte2) + 0x1; | ||
| 263 | } | ||
| 264 | |||
| 265 | for (u32 i = 0; i < length; i++) { | ||
| 266 | *out = *(out - offset); | ||
| 267 | ++out; | ||
| 268 | } | ||
| 269 | |||
| 270 | current_out_size += length; | ||
| 271 | } else { | ||
| 272 | *(out++) = *(in++); | ||
| 273 | current_out_size++; | ||
| 274 | } | ||
| 275 | } | ||
| 276 | return decompressed_size; | ||
| 277 | } | ||
| 278 | |||
| 279 | static bool LoadSharedFont() { | ||
| 280 | u8 font_region_code; | ||
| 281 | switch (CFG::GetRegionValue()) { | ||
| 282 | case 4: // CHN | ||
| 283 | font_region_code = 2; | ||
| 284 | break; | ||
| 285 | case 5: // KOR | ||
| 286 | font_region_code = 3; | ||
| 287 | break; | ||
| 288 | case 6: // TWN | ||
| 289 | font_region_code = 4; | ||
| 290 | break; | ||
| 291 | default: // JPN/EUR/USA | ||
| 292 | font_region_code = 1; | ||
| 293 | break; | ||
| 294 | } | ||
| 295 | |||
| 296 | const u64_le shared_font_archive_id_low = 0x0004009b00014002 | ((font_region_code - 1) << 8); | ||
| 297 | const u64_le shared_font_archive_id_high = 0x00000001ffffff00; | ||
| 298 | std::vector<u8> shared_font_archive_id(16); | ||
| 299 | std::memcpy(&shared_font_archive_id[0], &shared_font_archive_id_low, sizeof(u64)); | ||
| 300 | std::memcpy(&shared_font_archive_id[8], &shared_font_archive_id_high, sizeof(u64)); | ||
| 301 | FileSys::Path archive_path(shared_font_archive_id); | ||
| 302 | auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::NCCH, archive_path); | ||
| 303 | if (archive_result.Failed()) | ||
| 304 | return false; | ||
| 305 | |||
| 306 | std::vector<u8> romfs_path(20, 0); // 20-byte all zero path for opening RomFS | ||
| 307 | FileSys::Path file_path(romfs_path); | ||
| 308 | FileSys::Mode open_mode = {}; | ||
| 309 | open_mode.read_flag.Assign(1); | ||
| 310 | auto file_result = Service::FS::OpenFileFromArchive(*archive_result, file_path, open_mode); | ||
| 311 | if (file_result.Failed()) | ||
| 312 | return false; | ||
| 313 | |||
| 314 | auto romfs = std::move(file_result).Unwrap(); | ||
| 315 | std::vector<u8> romfs_buffer(romfs->backend->GetSize()); | ||
| 316 | romfs->backend->Read(0, romfs_buffer.size(), romfs_buffer.data()); | ||
| 317 | romfs->backend->Close(); | ||
| 318 | |||
| 319 | const char16_t* file_name[4] = {u"cbf_std.bcfnt.lz", u"cbf_zh-Hans-CN.bcfnt.lz", | ||
| 320 | u"cbf_ko-Hang-KR.bcfnt.lz", u"cbf_zh-Hant-TW.bcfnt.lz"}; | ||
| 321 | const u8* font_file = | ||
| 322 | RomFS::GetFilePointer(romfs_buffer.data(), {file_name[font_region_code - 1]}); | ||
| 323 | if (font_file == nullptr) | ||
| 324 | return false; | ||
| 325 | |||
| 326 | struct { | ||
| 327 | u32_le status; | ||
| 328 | u32_le region; | ||
| 329 | u32_le decompressed_size; | ||
| 330 | INSERT_PADDING_WORDS(0x1D); | ||
| 331 | } shared_font_header{}; | ||
| 332 | static_assert(sizeof(shared_font_header) == 0x80, "shared_font_header has incorrect size"); | ||
| 333 | |||
| 334 | shared_font_header.status = 2; // successfully loaded | ||
| 335 | shared_font_header.region = font_region_code; | ||
| 336 | shared_font_header.decompressed_size = | ||
| 337 | DecompressLZ11(font_file, shared_font_mem->GetPointer(0x80)); | ||
| 338 | std::memcpy(shared_font_mem->GetPointer(), &shared_font_header, sizeof(shared_font_header)); | ||
| 339 | *shared_font_mem->GetPointer(0x83) = 'U'; // Change the magic from "CFNT" to "CFNU" | ||
| 340 | |||
| 341 | return true; | ||
| 342 | } | ||
| 343 | |||
| 344 | static bool LoadLegacySharedFont() { | ||
| 345 | // This is the legacy method to load shared font. | ||
| 346 | // The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header | ||
| 347 | // generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided | ||
| 348 | // a homebrew app to do this: https://github.com/citra-emu/3dsutils. Put the resulting file | ||
| 349 | // "shared_font.bin" in the Citra "sysdata" directory. | ||
| 350 | std::string filepath = FileUtil::GetUserPath(D_SYSDATA_IDX) + SHARED_FONT; | ||
| 351 | |||
| 352 | FileUtil::CreateFullPath(filepath); // Create path if not already created | ||
| 353 | FileUtil::IOFile file(filepath, "rb"); | ||
| 354 | if (file.IsOpen()) { | ||
| 355 | file.ReadBytes(shared_font_mem->GetPointer(), file.GetSize()); | ||
| 356 | return true; | ||
| 357 | } | ||
| 358 | |||
| 359 | return false; | ||
| 72 | } | 360 | } |
| 73 | 361 | ||
| 74 | void GetSharedFont(Service::Interface* self) { | 362 | void GetSharedFont(Service::Interface* self) { |
| 75 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x44, 0, 0); // 0x00440000 | 363 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x44, 0, 0); // 0x00440000 |
| 76 | IPC::RequestBuilder rb = rp.MakeBuilder(2, 2); | 364 | IPC::RequestBuilder rb = rp.MakeBuilder(2, 2); |
| 365 | |||
| 366 | // Log in telemetry if the game uses the shared font | ||
| 367 | Core::Telemetry().AddField(Telemetry::FieldType::Session, "RequiresSharedFont", true); | ||
| 368 | |||
| 77 | if (!shared_font_loaded) { | 369 | if (!shared_font_loaded) { |
| 78 | LOG_ERROR(Service_APT, "shared font file missing - go dump it from your 3ds"); | 370 | // On real 3DS, font loading happens on booting. However, we load it on demand to coordinate |
| 79 | rb.Push<u32>(-1); // TODO: Find the right error code | 371 | // with CFG region auto configuration, which happens later than APT initialization. |
| 80 | rb.Skip(1 + 2, true); | 372 | if (LoadSharedFont()) { |
| 81 | Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSharedFont); | 373 | shared_font_loaded = true; |
| 82 | return; | 374 | } else if (LoadLegacySharedFont()) { |
| 375 | LOG_WARNING(Service_APT, "Loaded shared font by legacy method"); | ||
| 376 | shared_font_loaded = true; | ||
| 377 | } else { | ||
| 378 | LOG_ERROR(Service_APT, "shared font file missing - go dump it from your 3ds"); | ||
| 379 | rb.Push<u32>(-1); // TODO: Find the right error code | ||
| 380 | rb.Skip(1 + 2, true); | ||
| 381 | Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSharedFont); | ||
| 382 | return; | ||
| 383 | } | ||
| 83 | } | 384 | } |
| 84 | 385 | ||
| 85 | // The shared font has to be relocated to the new address before being passed to the | 386 | // The shared font has to be relocated to the new address before being passed to the |
| @@ -115,7 +416,12 @@ void GetLockHandle(Service::Interface* self) { | |||
| 115 | // this will cause the app to wait until parameter_event is signaled. | 416 | // this will cause the app to wait until parameter_event is signaled. |
| 116 | u32 applet_attributes = rp.Pop<u32>(); | 417 | u32 applet_attributes = rp.Pop<u32>(); |
| 117 | IPC::RequestBuilder rb = rp.MakeBuilder(3, 2); | 418 | IPC::RequestBuilder rb = rp.MakeBuilder(3, 2); |
| 118 | rb.Push(RESULT_SUCCESS); // No error | 419 | rb.Push(RESULT_SUCCESS); // No error |
| 420 | |||
| 421 | // TODO(Subv): The output attributes should have an AppletPos of either Library or System | | ||
| 422 | // Library (depending on the type of the last launched applet) if the input attributes' | ||
| 423 | // AppletPos has the Library bit set. | ||
| 424 | |||
| 119 | rb.Push(applet_attributes); // Applet Attributes, this value is passed to Enable. | 425 | rb.Push(applet_attributes); // Applet Attributes, this value is passed to Enable. |
| 120 | rb.Push<u32>(0); // Least significant bit = power button state | 426 | rb.Push<u32>(0); // Least significant bit = power button state |
| 121 | Kernel::Handle handle_copy = Kernel::g_handle_table.Create(lock).Unwrap(); | 427 | Kernel::Handle handle_copy = Kernel::g_handle_table.Create(lock).Unwrap(); |
| @@ -128,10 +434,22 @@ void GetLockHandle(Service::Interface* self) { | |||
| 128 | void Enable(Service::Interface* self) { | 434 | void Enable(Service::Interface* self) { |
| 129 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x3, 1, 0); // 0x30040 | 435 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x3, 1, 0); // 0x30040 |
| 130 | u32 attributes = rp.Pop<u32>(); | 436 | u32 attributes = rp.Pop<u32>(); |
| 437 | |||
| 438 | LOG_DEBUG(Service_APT, "called attributes=0x%08X", attributes); | ||
| 439 | |||
| 131 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | 440 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |
| 132 | rb.Push(RESULT_SUCCESS); // No error | 441 | |
| 133 | parameter_event->Signal(); // Let the application know that it has been started | 442 | auto* const slot_data = GetAppletSlotData(attributes); |
| 134 | LOG_WARNING(Service_APT, "(STUBBED) called attributes=0x%08X", attributes); | 443 | |
| 444 | if (!slot_data) { | ||
| 445 | rb.Push(ResultCode(ErrCodes::InvalidAppletSlot, ErrorModule::Applet, | ||
| 446 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 447 | return; | ||
| 448 | } | ||
| 449 | |||
| 450 | slot_data->registered = true; | ||
| 451 | |||
| 452 | rb.Push(RESULT_SUCCESS); | ||
| 135 | } | 453 | } |
| 136 | 454 | ||
| 137 | void GetAppletManInfo(Service::Interface* self) { | 455 | void GetAppletManInfo(Service::Interface* self) { |
| @@ -149,22 +467,27 @@ void GetAppletManInfo(Service::Interface* self) { | |||
| 149 | 467 | ||
| 150 | void IsRegistered(Service::Interface* self) { | 468 | void IsRegistered(Service::Interface* self) { |
| 151 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x9, 1, 0); // 0x90040 | 469 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x9, 1, 0); // 0x90040 |
| 152 | u32 app_id = rp.Pop<u32>(); | 470 | AppletId app_id = static_cast<AppletId>(rp.Pop<u32>()); |
| 153 | IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | 471 | IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |
| 154 | rb.Push(RESULT_SUCCESS); // No error | 472 | rb.Push(RESULT_SUCCESS); // No error |
| 155 | 473 | ||
| 156 | // TODO(Subv): An application is considered "registered" if it has already called APT::Enable | 474 | auto* const slot_data = GetAppletSlotData(app_id); |
| 157 | // handle this properly once we implement multiprocess support. | 475 | |
| 158 | bool is_registered = false; // Set to not registered by default | 476 | // Check if an LLE applet was registered first, then fallback to HLE applets |
| 477 | bool is_registered = slot_data && slot_data->registered; | ||
| 159 | 478 | ||
| 160 | if (app_id == static_cast<u32>(AppletId::AnyLibraryApplet)) { | 479 | if (!is_registered) { |
| 161 | is_registered = HLE::Applets::IsLibraryAppletRunning(); | 480 | if (app_id == AppletId::AnyLibraryApplet) { |
| 162 | } else if (auto applet = HLE::Applets::Applet::Get(static_cast<AppletId>(app_id))) { | 481 | is_registered = HLE::Applets::IsLibraryAppletRunning(); |
| 163 | is_registered = true; // Set to registered | 482 | } else if (auto applet = HLE::Applets::Applet::Get(app_id)) { |
| 483 | // The applet exists, set it as registered. | ||
| 484 | is_registered = true; | ||
| 485 | } | ||
| 164 | } | 486 | } |
| 487 | |||
| 165 | rb.Push(is_registered); | 488 | rb.Push(is_registered); |
| 166 | 489 | ||
| 167 | LOG_WARNING(Service_APT, "(STUBBED) called app_id=0x%08X", app_id); | 490 | LOG_DEBUG(Service_APT, "called app_id=0x%08X", static_cast<u32>(app_id)); |
| 168 | } | 491 | } |
| 169 | 492 | ||
| 170 | void InquireNotification(Service::Interface* self) { | 493 | void InquireNotification(Service::Interface* self) { |
| @@ -186,14 +509,17 @@ void SendParameter(Service::Interface* self) { | |||
| 186 | size_t size; | 509 | size_t size; |
| 187 | VAddr buffer = rp.PopStaticBuffer(&size); | 510 | VAddr buffer = rp.PopStaticBuffer(&size); |
| 188 | 511 | ||
| 189 | std::shared_ptr<HLE::Applets::Applet> dest_applet = | 512 | LOG_DEBUG(Service_APT, |
| 190 | HLE::Applets::Applet::Get(static_cast<AppletId>(dst_app_id)); | 513 | "called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," |
| 514 | "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X", | ||
| 515 | src_app_id, dst_app_id, signal_type, buffer_size, handle, size, buffer); | ||
| 191 | 516 | ||
| 192 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | 517 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |
| 193 | 518 | ||
| 194 | if (dest_applet == nullptr) { | 519 | // A new parameter can not be sent if the previous one hasn't been consumed yet |
| 195 | LOG_ERROR(Service_APT, "Unknown applet id=0x%08X", dst_app_id); | 520 | if (next_parameter) { |
| 196 | rb.Push<u32>(-1); // TODO(Subv): Find the right error code | 521 | rb.Push(ResultCode(ErrCodes::ParameterPresent, ErrorModule::Applet, |
| 522 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 197 | return; | 523 | return; |
| 198 | } | 524 | } |
| 199 | 525 | ||
| @@ -205,12 +531,14 @@ void SendParameter(Service::Interface* self) { | |||
| 205 | param.buffer.resize(buffer_size); | 531 | param.buffer.resize(buffer_size); |
| 206 | Memory::ReadBlock(buffer, param.buffer.data(), param.buffer.size()); | 532 | Memory::ReadBlock(buffer, param.buffer.data(), param.buffer.size()); |
| 207 | 533 | ||
| 208 | rb.Push(dest_applet->ReceiveParameter(param)); | 534 | SendParameter(param); |
| 209 | 535 | ||
| 210 | LOG_WARNING(Service_APT, | 536 | // If the applet is running in HLE mode, use the HLE interface to communicate with it. |
| 211 | "(STUBBED) called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," | 537 | if (auto dest_applet = HLE::Applets::Applet::Get(static_cast<AppletId>(dst_app_id))) { |
| 212 | "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X", | 538 | rb.Push(dest_applet->ReceiveParameter(param)); |
| 213 | src_app_id, dst_app_id, signal_type, buffer_size, handle, size, buffer); | 539 | } else { |
| 540 | rb.Push(RESULT_SUCCESS); | ||
| 541 | } | ||
| 214 | } | 542 | } |
| 215 | 543 | ||
| 216 | void ReceiveParameter(Service::Interface* self) { | 544 | void ReceiveParameter(Service::Interface* self) { |
| @@ -226,21 +554,40 @@ void ReceiveParameter(Service::Interface* self) { | |||
| 226 | "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", | 554 | "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", |
| 227 | buffer_size, static_buff_size); | 555 | buffer_size, static_buff_size); |
| 228 | 556 | ||
| 557 | LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); | ||
| 558 | |||
| 559 | if (!next_parameter) { | ||
| 560 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||
| 561 | rb.Push(ResultCode(ErrorDescription::NoData, ErrorModule::Applet, | ||
| 562 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 563 | return; | ||
| 564 | } | ||
| 565 | |||
| 566 | if (next_parameter->destination_id != app_id) { | ||
| 567 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||
| 568 | rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::Applet, ErrorSummary::NotFound, | ||
| 569 | ErrorLevel::Status)); | ||
| 570 | return; | ||
| 571 | } | ||
| 572 | |||
| 229 | IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); | 573 | IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); |
| 574 | |||
| 230 | rb.Push(RESULT_SUCCESS); // No error | 575 | rb.Push(RESULT_SUCCESS); // No error |
| 231 | rb.Push(next_parameter.sender_id); | 576 | rb.Push(next_parameter->sender_id); |
| 232 | rb.Push(next_parameter.signal); // Signal type | 577 | rb.Push(next_parameter->signal); // Signal type |
| 233 | ASSERT_MSG(next_parameter.buffer.size() <= buffer_size, "Input static buffer is too small !"); | 578 | ASSERT_MSG(next_parameter->buffer.size() <= buffer_size, "Input static buffer is too small !"); |
| 234 | rb.Push(static_cast<u32>(next_parameter.buffer.size())); // Parameter buffer size | 579 | rb.Push(static_cast<u32>(next_parameter->buffer.size())); // Parameter buffer size |
| 235 | 580 | ||
| 236 | rb.PushMoveHandles((next_parameter.object != nullptr) | 581 | rb.PushMoveHandles((next_parameter->object != nullptr) |
| 237 | ? Kernel::g_handle_table.Create(next_parameter.object).Unwrap() | 582 | ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap() |
| 238 | : 0); | 583 | : 0); |
| 239 | rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter.buffer.size()), 0); | ||
| 240 | 584 | ||
| 241 | Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); | 585 | rb.PushStaticBuffer(buffer, next_parameter->buffer.size(), 0); |
| 586 | |||
| 587 | Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); | ||
| 242 | 588 | ||
| 243 | LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); | 589 | // Clear the parameter |
| 590 | next_parameter = boost::none; | ||
| 244 | } | 591 | } |
| 245 | 592 | ||
| 246 | void GlanceParameter(Service::Interface* self) { | 593 | void GlanceParameter(Service::Interface* self) { |
| @@ -256,37 +603,74 @@ void GlanceParameter(Service::Interface* self) { | |||
| 256 | "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", | 603 | "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", |
| 257 | buffer_size, static_buff_size); | 604 | buffer_size, static_buff_size); |
| 258 | 605 | ||
| 606 | LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); | ||
| 607 | |||
| 608 | if (!next_parameter) { | ||
| 609 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||
| 610 | rb.Push(ResultCode(ErrorDescription::NoData, ErrorModule::Applet, | ||
| 611 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 612 | return; | ||
| 613 | } | ||
| 614 | |||
| 615 | if (next_parameter->destination_id != app_id) { | ||
| 616 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||
| 617 | rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::Applet, ErrorSummary::NotFound, | ||
| 618 | ErrorLevel::Status)); | ||
| 619 | return; | ||
| 620 | } | ||
| 621 | |||
| 259 | IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); | 622 | IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); |
| 260 | rb.Push(RESULT_SUCCESS); // No error | 623 | rb.Push(RESULT_SUCCESS); // No error |
| 261 | rb.Push(next_parameter.sender_id); | 624 | rb.Push(next_parameter->sender_id); |
| 262 | rb.Push(next_parameter.signal); // Signal type | 625 | rb.Push(next_parameter->signal); // Signal type |
| 263 | ASSERT_MSG(next_parameter.buffer.size() <= buffer_size, "Input static buffer is too small !"); | 626 | ASSERT_MSG(next_parameter->buffer.size() <= buffer_size, "Input static buffer is too small !"); |
| 264 | rb.Push(static_cast<u32>(next_parameter.buffer.size())); // Parameter buffer size | 627 | rb.Push(static_cast<u32>(next_parameter->buffer.size())); // Parameter buffer size |
| 265 | 628 | ||
| 266 | rb.PushCopyHandles((next_parameter.object != nullptr) | 629 | rb.PushMoveHandles((next_parameter->object != nullptr) |
| 267 | ? Kernel::g_handle_table.Create(next_parameter.object).Unwrap() | 630 | ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap() |
| 268 | : 0); | 631 | : 0); |
| 269 | rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter.buffer.size()), 0); | ||
| 270 | 632 | ||
| 271 | Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); | 633 | rb.PushStaticBuffer(buffer, next_parameter->buffer.size(), 0); |
| 634 | |||
| 635 | Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); | ||
| 272 | 636 | ||
| 273 | LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); | 637 | // Note: The NS module always clears the DSPSleep and DSPWakeup signals even in GlanceParameter. |
| 638 | if (next_parameter->signal == static_cast<u32>(SignalType::DspSleep) || | ||
| 639 | next_parameter->signal == static_cast<u32>(SignalType::DspWakeup)) | ||
| 640 | next_parameter = boost::none; | ||
| 274 | } | 641 | } |
| 275 | 642 | ||
| 276 | void CancelParameter(Service::Interface* self) { | 643 | void CancelParameter(Service::Interface* self) { |
| 277 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xF, 4, 0); // 0xF0100 | 644 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xF, 4, 0); // 0xF0100 |
| 278 | 645 | ||
| 279 | u32 check_sender = rp.Pop<u32>(); | 646 | bool check_sender = rp.Pop<bool>(); |
| 280 | u32 sender_appid = rp.Pop<u32>(); | 647 | u32 sender_appid = rp.Pop<u32>(); |
| 281 | u32 check_receiver = rp.Pop<u32>(); | 648 | bool check_receiver = rp.Pop<bool>(); |
| 282 | u32 receiver_appid = rp.Pop<u32>(); | 649 | u32 receiver_appid = rp.Pop<u32>(); |
| 650 | |||
| 651 | bool cancellation_success = true; | ||
| 652 | |||
| 653 | if (!next_parameter) { | ||
| 654 | cancellation_success = false; | ||
| 655 | } else { | ||
| 656 | if (check_sender && next_parameter->sender_id != sender_appid) | ||
| 657 | cancellation_success = false; | ||
| 658 | |||
| 659 | if (check_receiver && next_parameter->destination_id != receiver_appid) | ||
| 660 | cancellation_success = false; | ||
| 661 | } | ||
| 662 | |||
| 663 | if (cancellation_success) | ||
| 664 | next_parameter = boost::none; | ||
| 665 | |||
| 283 | IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | 666 | IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |
| 667 | |||
| 284 | rb.Push(RESULT_SUCCESS); // No error | 668 | rb.Push(RESULT_SUCCESS); // No error |
| 285 | rb.Push(true); // Set to Success | 669 | rb.Push(cancellation_success); |
| 286 | 670 | ||
| 287 | LOG_WARNING(Service_APT, "(STUBBED) called check_sender=0x%08X, sender_appid=0x%08X, " | 671 | LOG_DEBUG(Service_APT, "called check_sender=%u, sender_appid=0x%08X, " |
| 288 | "check_receiver=0x%08X, receiver_appid=0x%08X", | 672 | "check_receiver=%u, receiver_appid=0x%08X", |
| 289 | check_sender, sender_appid, check_receiver, receiver_appid); | 673 | check_sender, sender_appid, check_receiver, receiver_appid); |
| 290 | } | 674 | } |
| 291 | 675 | ||
| 292 | void PrepareToStartApplication(Service::Interface* self) { | 676 | void PrepareToStartApplication(Service::Interface* self) { |
| @@ -383,7 +767,12 @@ void PrepareToStartLibraryApplet(Service::Interface* self) { | |||
| 383 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x18, 1, 0); // 0x180040 | 767 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x18, 1, 0); // 0x180040 |
| 384 | AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); | 768 | AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); |
| 385 | 769 | ||
| 770 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); | ||
| 771 | |||
| 386 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | 772 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |
| 773 | |||
| 774 | // TODO(Subv): Launch the requested applet application. | ||
| 775 | |||
| 387 | auto applet = HLE::Applets::Applet::Get(applet_id); | 776 | auto applet = HLE::Applets::Applet::Get(applet_id); |
| 388 | if (applet) { | 777 | if (applet) { |
| 389 | LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); | 778 | LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); |
| @@ -391,14 +780,32 @@ void PrepareToStartLibraryApplet(Service::Interface* self) { | |||
| 391 | } else { | 780 | } else { |
| 392 | rb.Push(HLE::Applets::Applet::Create(applet_id)); | 781 | rb.Push(HLE::Applets::Applet::Create(applet_id)); |
| 393 | } | 782 | } |
| 394 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); | 783 | } |
| 784 | |||
| 785 | void PrepareToStartNewestHomeMenu(Service::Interface* self) { | ||
| 786 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); // 0x1A0000 | ||
| 787 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||
| 788 | |||
| 789 | // TODO(Subv): This command can only be called by a System Applet (return 0xC8A0CC04 otherwise). | ||
| 790 | |||
| 791 | // This command must return an error when called, otherwise the Home Menu will try to reboot the | ||
| 792 | // system. | ||
| 793 | rb.Push(ResultCode(ErrorDescription::AlreadyExists, ErrorModule::Applet, | ||
| 794 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 795 | |||
| 796 | LOG_DEBUG(Service_APT, "called"); | ||
| 395 | } | 797 | } |
| 396 | 798 | ||
| 397 | void PreloadLibraryApplet(Service::Interface* self) { | 799 | void PreloadLibraryApplet(Service::Interface* self) { |
| 398 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040 | 800 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040 |
| 399 | AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); | 801 | AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); |
| 400 | 802 | ||
| 803 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); | ||
| 804 | |||
| 401 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | 805 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |
| 806 | |||
| 807 | // TODO(Subv): Launch the requested applet application. | ||
| 808 | |||
| 402 | auto applet = HLE::Applets::Applet::Get(applet_id); | 809 | auto applet = HLE::Applets::Applet::Get(applet_id); |
| 403 | if (applet) { | 810 | if (applet) { |
| 404 | LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); | 811 | LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); |
| @@ -406,34 +813,40 @@ void PreloadLibraryApplet(Service::Interface* self) { | |||
| 406 | } else { | 813 | } else { |
| 407 | rb.Push(HLE::Applets::Applet::Create(applet_id)); | 814 | rb.Push(HLE::Applets::Applet::Create(applet_id)); |
| 408 | } | 815 | } |
| 409 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); | ||
| 410 | } | 816 | } |
| 411 | 817 | ||
| 412 | void StartLibraryApplet(Service::Interface* self) { | 818 | void StartLibraryApplet(Service::Interface* self) { |
| 413 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1E, 2, 4); // 0x1E0084 | 819 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1E, 2, 4); // 0x1E0084 |
| 414 | AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); | 820 | AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); |
| 415 | std::shared_ptr<HLE::Applets::Applet> applet = HLE::Applets::Applet::Get(applet_id); | ||
| 416 | |||
| 417 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); | ||
| 418 | |||
| 419 | if (applet == nullptr) { | ||
| 420 | LOG_ERROR(Service_APT, "unknown applet id=%08X", applet_id); | ||
| 421 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0, false); | ||
| 422 | rb.Push<u32>(-1); // TODO(Subv): Find the right error code | ||
| 423 | return; | ||
| 424 | } | ||
| 425 | 821 | ||
| 426 | size_t buffer_size = rp.Pop<u32>(); | 822 | size_t buffer_size = rp.Pop<u32>(); |
| 427 | Kernel::Handle handle = rp.PopHandle(); | 823 | Kernel::Handle handle = rp.PopHandle(); |
| 428 | VAddr buffer_addr = rp.PopStaticBuffer(); | 824 | VAddr buffer_addr = rp.PopStaticBuffer(); |
| 429 | 825 | ||
| 430 | AppletStartupParameter parameter; | 826 | LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); |
| 431 | parameter.object = Kernel::g_handle_table.GetGeneric(handle); | ||
| 432 | parameter.buffer.resize(buffer_size); | ||
| 433 | Memory::ReadBlock(buffer_addr, parameter.buffer.data(), parameter.buffer.size()); | ||
| 434 | 827 | ||
| 435 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | 828 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |
| 436 | rb.Push(applet->Start(parameter)); | 829 | |
| 830 | // Send the Wakeup signal to the applet | ||
| 831 | MessageParameter param; | ||
| 832 | param.destination_id = static_cast<u32>(applet_id); | ||
| 833 | param.sender_id = static_cast<u32>(AppletId::Application); | ||
| 834 | param.object = Kernel::g_handle_table.GetGeneric(handle); | ||
| 835 | param.signal = static_cast<u32>(SignalType::Wakeup); | ||
| 836 | param.buffer.resize(buffer_size); | ||
| 837 | Memory::ReadBlock(buffer_addr, param.buffer.data(), param.buffer.size()); | ||
| 838 | SendParameter(param); | ||
| 839 | |||
| 840 | // In case the applet is being HLEd, attempt to communicate with it. | ||
| 841 | if (auto applet = HLE::Applets::Applet::Get(applet_id)) { | ||
| 842 | AppletStartupParameter parameter; | ||
| 843 | parameter.object = Kernel::g_handle_table.GetGeneric(handle); | ||
| 844 | parameter.buffer.resize(buffer_size); | ||
| 845 | Memory::ReadBlock(buffer_addr, parameter.buffer.data(), parameter.buffer.size()); | ||
| 846 | rb.Push(applet->Start(parameter)); | ||
| 847 | } else { | ||
| 848 | rb.Push(RESULT_SUCCESS); | ||
| 849 | } | ||
| 437 | } | 850 | } |
| 438 | 851 | ||
| 439 | void CancelLibraryApplet(Service::Interface* self) { | 852 | void CancelLibraryApplet(Service::Interface* self) { |
| @@ -647,125 +1060,6 @@ void CheckNew3DS(Service::Interface* self) { | |||
| 647 | LOG_WARNING(Service_APT, "(STUBBED) called"); | 1060 | LOG_WARNING(Service_APT, "(STUBBED) called"); |
| 648 | } | 1061 | } |
| 649 | 1062 | ||
| 650 | static u32 DecompressLZ11(const u8* in, u8* out) { | ||
| 651 | u32_le decompressed_size; | ||
| 652 | memcpy(&decompressed_size, in, sizeof(u32)); | ||
| 653 | in += 4; | ||
| 654 | |||
| 655 | u8 type = decompressed_size & 0xFF; | ||
| 656 | ASSERT(type == 0x11); | ||
| 657 | decompressed_size >>= 8; | ||
| 658 | |||
| 659 | u32 current_out_size = 0; | ||
| 660 | u8 flags = 0, mask = 1; | ||
| 661 | while (current_out_size < decompressed_size) { | ||
| 662 | if (mask == 1) { | ||
| 663 | flags = *(in++); | ||
| 664 | mask = 0x80; | ||
| 665 | } else { | ||
| 666 | mask >>= 1; | ||
| 667 | } | ||
| 668 | |||
| 669 | if (flags & mask) { | ||
| 670 | u8 byte1 = *(in++); | ||
| 671 | u32 length = byte1 >> 4; | ||
| 672 | u32 offset; | ||
| 673 | if (length == 0) { | ||
| 674 | u8 byte2 = *(in++); | ||
| 675 | u8 byte3 = *(in++); | ||
| 676 | length = (((byte1 & 0x0F) << 4) | (byte2 >> 4)) + 0x11; | ||
| 677 | offset = (((byte2 & 0x0F) << 8) | byte3) + 0x1; | ||
| 678 | } else if (length == 1) { | ||
| 679 | u8 byte2 = *(in++); | ||
| 680 | u8 byte3 = *(in++); | ||
| 681 | u8 byte4 = *(in++); | ||
| 682 | length = (((byte1 & 0x0F) << 12) | (byte2 << 4) | (byte3 >> 4)) + 0x111; | ||
| 683 | offset = (((byte3 & 0x0F) << 8) | byte4) + 0x1; | ||
| 684 | } else { | ||
| 685 | u8 byte2 = *(in++); | ||
| 686 | length = (byte1 >> 4) + 0x1; | ||
| 687 | offset = (((byte1 & 0x0F) << 8) | byte2) + 0x1; | ||
| 688 | } | ||
| 689 | |||
| 690 | for (u32 i = 0; i < length; i++) { | ||
| 691 | *out = *(out - offset); | ||
| 692 | ++out; | ||
| 693 | } | ||
| 694 | |||
| 695 | current_out_size += length; | ||
| 696 | } else { | ||
| 697 | *(out++) = *(in++); | ||
| 698 | current_out_size++; | ||
| 699 | } | ||
| 700 | } | ||
| 701 | return decompressed_size; | ||
| 702 | } | ||
| 703 | |||
| 704 | static bool LoadSharedFont() { | ||
| 705 | // TODO (wwylele): load different font archive for region CHN/KOR/TWN | ||
| 706 | const u64_le shared_font_archive_id_low = 0x0004009b00014002; | ||
| 707 | const u64_le shared_font_archive_id_high = 0x00000001ffffff00; | ||
| 708 | std::vector<u8> shared_font_archive_id(16); | ||
| 709 | std::memcpy(&shared_font_archive_id[0], &shared_font_archive_id_low, sizeof(u64)); | ||
| 710 | std::memcpy(&shared_font_archive_id[8], &shared_font_archive_id_high, sizeof(u64)); | ||
| 711 | FileSys::Path archive_path(shared_font_archive_id); | ||
| 712 | auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::NCCH, archive_path); | ||
| 713 | if (archive_result.Failed()) | ||
| 714 | return false; | ||
| 715 | |||
| 716 | std::vector<u8> romfs_path(20, 0); // 20-byte all zero path for opening RomFS | ||
| 717 | FileSys::Path file_path(romfs_path); | ||
| 718 | FileSys::Mode open_mode = {}; | ||
| 719 | open_mode.read_flag.Assign(1); | ||
| 720 | auto file_result = Service::FS::OpenFileFromArchive(*archive_result, file_path, open_mode); | ||
| 721 | if (file_result.Failed()) | ||
| 722 | return false; | ||
| 723 | |||
| 724 | auto romfs = std::move(file_result).Unwrap(); | ||
| 725 | std::vector<u8> romfs_buffer(romfs->backend->GetSize()); | ||
| 726 | romfs->backend->Read(0, romfs_buffer.size(), romfs_buffer.data()); | ||
| 727 | romfs->backend->Close(); | ||
| 728 | |||
| 729 | const u8* font_file = RomFS::GetFilePointer(romfs_buffer.data(), {u"cbf_std.bcfnt.lz"}); | ||
| 730 | if (font_file == nullptr) | ||
| 731 | return false; | ||
| 732 | |||
| 733 | struct { | ||
| 734 | u32_le status; | ||
| 735 | u32_le region; | ||
| 736 | u32_le decompressed_size; | ||
| 737 | INSERT_PADDING_WORDS(0x1D); | ||
| 738 | } shared_font_header{}; | ||
| 739 | static_assert(sizeof(shared_font_header) == 0x80, "shared_font_header has incorrect size"); | ||
| 740 | |||
| 741 | shared_font_header.status = 2; // successfully loaded | ||
| 742 | shared_font_header.region = 1; // region JPN/EUR/USA | ||
| 743 | shared_font_header.decompressed_size = | ||
| 744 | DecompressLZ11(font_file, shared_font_mem->GetPointer(0x80)); | ||
| 745 | std::memcpy(shared_font_mem->GetPointer(), &shared_font_header, sizeof(shared_font_header)); | ||
| 746 | *shared_font_mem->GetPointer(0x83) = 'U'; // Change the magic from "CFNT" to "CFNU" | ||
| 747 | |||
| 748 | return true; | ||
| 749 | } | ||
| 750 | |||
| 751 | static bool LoadLegacySharedFont() { | ||
| 752 | // This is the legacy method to load shared font. | ||
| 753 | // The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header | ||
| 754 | // generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided | ||
| 755 | // a homebrew app to do this: https://github.com/citra-emu/3dsutils. Put the resulting file | ||
| 756 | // "shared_font.bin" in the Citra "sysdata" directory. | ||
| 757 | std::string filepath = FileUtil::GetUserPath(D_SYSDATA_IDX) + SHARED_FONT; | ||
| 758 | |||
| 759 | FileUtil::CreateFullPath(filepath); // Create path if not already created | ||
| 760 | FileUtil::IOFile file(filepath, "rb"); | ||
| 761 | if (file.IsOpen()) { | ||
| 762 | file.ReadBytes(shared_font_mem->GetPointer(), file.GetSize()); | ||
| 763 | return true; | ||
| 764 | } | ||
| 765 | |||
| 766 | return false; | ||
| 767 | } | ||
| 768 | |||
| 769 | void Init() { | 1063 | void Init() { |
| 770 | AddService(new APT_A_Interface); | 1064 | AddService(new APT_A_Interface); |
| 771 | AddService(new APT_S_Interface); | 1065 | AddService(new APT_S_Interface); |
| @@ -789,19 +1083,24 @@ void Init() { | |||
| 789 | shared_font_loaded = false; | 1083 | shared_font_loaded = false; |
| 790 | } | 1084 | } |
| 791 | 1085 | ||
| 792 | lock = Kernel::Mutex::Create(false, "APT_U:Lock"); | 1086 | lock = Kernel::Mutex::Create(false, 0, "APT_U:Lock"); |
| 793 | 1087 | ||
| 794 | cpu_percent = 0; | 1088 | cpu_percent = 0; |
| 795 | unknown_ns_state_field = 0; | 1089 | unknown_ns_state_field = 0; |
| 796 | screen_capture_post_permission = | 1090 | screen_capture_post_permission = |
| 797 | ScreencapPostPermission::CleanThePermission; // TODO(JamePeng): verify the initial value | 1091 | ScreencapPostPermission::CleanThePermission; // TODO(JamePeng): verify the initial value |
| 798 | 1092 | ||
| 799 | // TODO(bunnei): Check if these are created in Initialize or on APT process startup. | 1093 | for (size_t slot = 0; slot < applet_slots.size(); ++slot) { |
| 800 | notification_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Notification"); | 1094 | auto& slot_data = applet_slots[slot]; |
| 801 | parameter_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Start"); | 1095 | slot_data.slot = static_cast<AppletSlot>(slot); |
| 802 | 1096 | slot_data.applet_id = AppletId::None; | |
| 803 | next_parameter.signal = static_cast<u32>(SignalType::Wakeup); | 1097 | slot_data.attributes.raw = 0; |
| 804 | next_parameter.destination_id = 0x300; | 1098 | slot_data.registered = false; |
| 1099 | slot_data.notification_event = | ||
| 1100 | Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Notification"); | ||
| 1101 | slot_data.parameter_event = | ||
| 1102 | Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Parameter"); | ||
| 1103 | } | ||
| 805 | } | 1104 | } |
| 806 | 1105 | ||
| 807 | void Shutdown() { | 1106 | void Shutdown() { |
| @@ -809,10 +1108,14 @@ void Shutdown() { | |||
| 809 | shared_font_loaded = false; | 1108 | shared_font_loaded = false; |
| 810 | shared_font_relocated = false; | 1109 | shared_font_relocated = false; |
| 811 | lock = nullptr; | 1110 | lock = nullptr; |
| 812 | notification_event = nullptr; | ||
| 813 | parameter_event = nullptr; | ||
| 814 | 1111 | ||
| 815 | next_parameter.object = nullptr; | 1112 | for (auto& slot : applet_slots) { |
| 1113 | slot.registered = false; | ||
| 1114 | slot.notification_event = nullptr; | ||
| 1115 | slot.parameter_event = nullptr; | ||
| 1116 | } | ||
| 1117 | |||
| 1118 | next_parameter = boost::none; | ||
| 816 | 1119 | ||
| 817 | HLE::Applets::Shutdown(); | 1120 | HLE::Applets::Shutdown(); |
| 818 | } | 1121 | } |
diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index ee80926d2..7b79e1f3e 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h | |||
| @@ -72,6 +72,8 @@ enum class SignalType : u32 { | |||
| 72 | 72 | ||
| 73 | /// App Id's used by APT functions | 73 | /// App Id's used by APT functions |
| 74 | enum class AppletId : u32 { | 74 | enum class AppletId : u32 { |
| 75 | None = 0, | ||
| 76 | AnySystemApplet = 0x100, | ||
| 75 | HomeMenu = 0x101, | 77 | HomeMenu = 0x101, |
| 76 | AlternateMenu = 0x103, | 78 | AlternateMenu = 0x103, |
| 77 | Camera = 0x110, | 79 | Camera = 0x110, |
| @@ -83,6 +85,7 @@ enum class AppletId : u32 { | |||
| 83 | Miiverse = 0x117, | 85 | Miiverse = 0x117, |
| 84 | MiiversePost = 0x118, | 86 | MiiversePost = 0x118, |
| 85 | AmiiboSettings = 0x119, | 87 | AmiiboSettings = 0x119, |
| 88 | AnySysLibraryApplet = 0x200, | ||
| 86 | SoftwareKeyboard1 = 0x201, | 89 | SoftwareKeyboard1 = 0x201, |
| 87 | Ed1 = 0x202, | 90 | Ed1 = 0x202, |
| 88 | PnoteApp = 0x204, | 91 | PnoteApp = 0x204, |
| @@ -116,6 +119,13 @@ enum class ScreencapPostPermission : u32 { | |||
| 116 | DisableScreenshotPostingToMiiverse = 3 | 119 | DisableScreenshotPostingToMiiverse = 3 |
| 117 | }; | 120 | }; |
| 118 | 121 | ||
| 122 | namespace ErrCodes { | ||
| 123 | enum { | ||
| 124 | ParameterPresent = 2, | ||
| 125 | InvalidAppletSlot = 4, | ||
| 126 | }; | ||
| 127 | } // namespace ErrCodes | ||
| 128 | |||
| 119 | /// Send a parameter to the currently-running application, which will read it via ReceiveParameter | 129 | /// Send a parameter to the currently-running application, which will read it via ReceiveParameter |
| 120 | void SendParameter(const MessageParameter& parameter); | 130 | void SendParameter(const MessageParameter& parameter); |
| 121 | 131 | ||
| @@ -410,6 +420,16 @@ void GetAppCpuTimeLimit(Service::Interface* self); | |||
| 410 | void PrepareToStartLibraryApplet(Service::Interface* self); | 420 | void PrepareToStartLibraryApplet(Service::Interface* self); |
| 411 | 421 | ||
| 412 | /** | 422 | /** |
| 423 | * APT::PrepareToStartNewestHomeMenu service function | ||
| 424 | * Inputs: | ||
| 425 | * 0 : Command header [0x001A0000] | ||
| 426 | * Outputs: | ||
| 427 | * 0 : Return header | ||
| 428 | * 1 : Result of function | ||
| 429 | */ | ||
| 430 | void PrepareToStartNewestHomeMenu(Service::Interface* self); | ||
| 431 | |||
| 432 | /** | ||
| 413 | * APT::PreloadLibraryApplet service function | 433 | * APT::PreloadLibraryApplet service function |
| 414 | * Inputs: | 434 | * Inputs: |
| 415 | * 0 : Command header [0x00160040] | 435 | * 0 : Command header [0x00160040] |
diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp index ec5668d05..bb78ee7d7 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp | |||
| @@ -17,10 +17,10 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 17 | {0x00060040, GetAppletInfo, "GetAppletInfo"}, | 17 | {0x00060040, GetAppletInfo, "GetAppletInfo"}, |
| 18 | {0x00070000, nullptr, "GetLastSignaledAppletId"}, | 18 | {0x00070000, nullptr, "GetLastSignaledAppletId"}, |
| 19 | {0x00080000, nullptr, "CountRegisteredApplet"}, | 19 | {0x00080000, nullptr, "CountRegisteredApplet"}, |
| 20 | {0x00090040, nullptr, "IsRegistered"}, | 20 | {0x00090040, IsRegistered, "IsRegistered"}, |
| 21 | {0x000A0040, nullptr, "GetAttribute"}, | 21 | {0x000A0040, nullptr, "GetAttribute"}, |
| 22 | {0x000B0040, InquireNotification, "InquireNotification"}, | 22 | {0x000B0040, InquireNotification, "InquireNotification"}, |
| 23 | {0x000C0104, nullptr, "SendParameter"}, | 23 | {0x000C0104, SendParameter, "SendParameter"}, |
| 24 | {0x000D0080, ReceiveParameter, "ReceiveParameter"}, | 24 | {0x000D0080, ReceiveParameter, "ReceiveParameter"}, |
| 25 | {0x000E0080, GlanceParameter, "GlanceParameter"}, | 25 | {0x000E0080, GlanceParameter, "GlanceParameter"}, |
| 26 | {0x000F0100, nullptr, "CancelParameter"}, | 26 | {0x000F0100, nullptr, "CancelParameter"}, |
| @@ -34,11 +34,11 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 34 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, | 34 | {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, |
| 35 | {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, | 35 | {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, |
| 36 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, | 36 | {0x00190040, nullptr, "PrepareToStartSystemApplet"}, |
| 37 | {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"}, | 37 | {0x001A0000, PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"}, |
| 38 | {0x001B00C4, nullptr, "StartApplication"}, | 38 | {0x001B00C4, nullptr, "StartApplication"}, |
| 39 | {0x001C0000, nullptr, "WakeupApplication"}, | 39 | {0x001C0000, nullptr, "WakeupApplication"}, |
| 40 | {0x001D0000, nullptr, "CancelApplication"}, | 40 | {0x001D0000, nullptr, "CancelApplication"}, |
| 41 | {0x001E0084, nullptr, "StartLibraryApplet"}, | 41 | {0x001E0084, StartLibraryApplet, "StartLibraryApplet"}, |
| 42 | {0x001F0084, nullptr, "StartSystemApplet"}, | 42 | {0x001F0084, nullptr, "StartSystemApplet"}, |
| 43 | {0x00200044, nullptr, "StartNewestHomeMenu"}, | 43 | {0x00200044, nullptr, "StartNewestHomeMenu"}, |
| 44 | {0x00210000, nullptr, "OrderToCloseApplication"}, | 44 | {0x00210000, nullptr, "OrderToCloseApplication"}, |
diff --git a/src/core/hle/service/cam/cam.cpp b/src/core/hle/service/cam/cam.cpp index c9f9e9d95..8172edae8 100644 --- a/src/core/hle/service/cam/cam.cpp +++ b/src/core/hle/service/cam/cam.cpp | |||
| @@ -177,7 +177,7 @@ void CompletionEventCallBack(u64 port_id, int) { | |||
| 177 | LOG_ERROR(Service_CAM, "The destination size (%u) doesn't match the source (%zu)!", | 177 | LOG_ERROR(Service_CAM, "The destination size (%u) doesn't match the source (%zu)!", |
| 178 | port.dest_size, buffer_size); | 178 | port.dest_size, buffer_size); |
| 179 | } | 179 | } |
| 180 | Memory::WriteBlock(port.dest, buffer.data(), std::min<u32>(port.dest_size, buffer_size)); | 180 | Memory::WriteBlock(port.dest, buffer.data(), std::min<size_t>(port.dest_size, buffer_size)); |
| 181 | } | 181 | } |
| 182 | 182 | ||
| 183 | port.is_receiving = false; | 183 | port.is_receiving = false; |
diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp index 6624f1711..f78c25fb2 100644 --- a/src/core/hle/service/cfg/cfg.cpp +++ b/src/core/hle/service/cfg/cfg.cpp | |||
| @@ -141,7 +141,7 @@ void GetCountryCodeString(Service::Interface* self) { | |||
| 141 | 141 | ||
| 142 | void GetCountryCodeID(Service::Interface* self) { | 142 | void GetCountryCodeID(Service::Interface* self) { |
| 143 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 143 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 144 | u16 country_code = cmd_buff[1]; | 144 | u16 country_code = static_cast<u16>(cmd_buff[1]); |
| 145 | u16 country_code_id = 0; | 145 | u16 country_code_id = 0; |
| 146 | 146 | ||
| 147 | // The following algorithm will fail if the first country code isn't 0. | 147 | // The following algorithm will fail if the first country code isn't 0. |
| @@ -168,7 +168,7 @@ void GetCountryCodeID(Service::Interface* self) { | |||
| 168 | cmd_buff[2] = country_code_id; | 168 | cmd_buff[2] = country_code_id; |
| 169 | } | 169 | } |
| 170 | 170 | ||
| 171 | static u32 GetRegionValue() { | 171 | u32 GetRegionValue() { |
| 172 | if (Settings::values.region_value == Settings::REGION_VALUE_AUTO_SELECT) | 172 | if (Settings::values.region_value == Settings::REGION_VALUE_AUTO_SELECT) |
| 173 | return preferred_region_code; | 173 | return preferred_region_code; |
| 174 | 174 | ||
| @@ -681,7 +681,7 @@ void GenerateConsoleUniqueId(u32& random_number, u64& console_id) { | |||
| 681 | CryptoPP::AutoSeededRandomPool rng; | 681 | CryptoPP::AutoSeededRandomPool rng; |
| 682 | random_number = rng.GenerateWord32(0, 0xFFFF); | 682 | random_number = rng.GenerateWord32(0, 0xFFFF); |
| 683 | u64_le local_friend_code_seed; | 683 | u64_le local_friend_code_seed; |
| 684 | rng.GenerateBlock(reinterpret_cast<byte*>(&local_friend_code_seed), | 684 | rng.GenerateBlock(reinterpret_cast<CryptoPP::byte*>(&local_friend_code_seed), |
| 685 | sizeof(local_friend_code_seed)); | 685 | sizeof(local_friend_code_seed)); |
| 686 | console_id = (local_friend_code_seed & 0x3FFFFFFFF) | (static_cast<u64>(random_number) << 48); | 686 | console_id = (local_friend_code_seed & 0x3FFFFFFFF) | (static_cast<u64>(random_number) << 48); |
| 687 | } | 687 | } |
diff --git a/src/core/hle/service/cfg/cfg.h b/src/core/hle/service/cfg/cfg.h index 1659ebf32..282b6936b 100644 --- a/src/core/hle/service/cfg/cfg.h +++ b/src/core/hle/service/cfg/cfg.h | |||
| @@ -101,6 +101,8 @@ void GetCountryCodeString(Service::Interface* self); | |||
| 101 | */ | 101 | */ |
| 102 | void GetCountryCodeID(Service::Interface* self); | 102 | void GetCountryCodeID(Service::Interface* self); |
| 103 | 103 | ||
| 104 | u32 GetRegionValue(); | ||
| 105 | |||
| 104 | /** | 106 | /** |
| 105 | * CFG::SecureInfoGetRegion service function | 107 | * CFG::SecureInfoGetRegion service function |
| 106 | * Inputs: | 108 | * Inputs: |
diff --git a/src/core/hle/service/csnd_snd.cpp b/src/core/hle/service/csnd_snd.cpp index 9471ec1ef..aac903ccb 100644 --- a/src/core/hle/service/csnd_snd.cpp +++ b/src/core/hle/service/csnd_snd.cpp | |||
| @@ -47,7 +47,7 @@ static void Initialize(Interface* self) { | |||
| 47 | MemoryPermission::ReadWrite, 0, | 47 | MemoryPermission::ReadWrite, 0, |
| 48 | Kernel::MemoryRegion::BASE, "CSND:SharedMemory"); | 48 | Kernel::MemoryRegion::BASE, "CSND:SharedMemory"); |
| 49 | 49 | ||
| 50 | mutex = Kernel::Mutex::Create(false, "CSND:mutex"); | 50 | mutex = Kernel::Mutex::Create(false, 0, "CSND:mutex"); |
| 51 | 51 | ||
| 52 | cmd_buff[1] = RESULT_SUCCESS.raw; | 52 | cmd_buff[1] = RESULT_SUCCESS.raw; |
| 53 | cmd_buff[2] = IPC::CopyHandleDesc(2); | 53 | cmd_buff[2] = IPC::CopyHandleDesc(2); |
diff --git a/src/core/hle/service/dlp/dlp_clnt.cpp b/src/core/hle/service/dlp/dlp_clnt.cpp index 56f934b3f..6f2bf2061 100644 --- a/src/core/hle/service/dlp/dlp_clnt.cpp +++ b/src/core/hle/service/dlp/dlp_clnt.cpp | |||
| @@ -8,7 +8,26 @@ namespace Service { | |||
| 8 | namespace DLP { | 8 | namespace DLP { |
| 9 | 9 | ||
| 10 | const Interface::FunctionInfo FunctionTable[] = { | 10 | const Interface::FunctionInfo FunctionTable[] = { |
| 11 | {0x000100C3, nullptr, "Initialize"}, {0x00110000, nullptr, "GetWirelessRebootPassphrase"}, | 11 | {0x000100C3, nullptr, "Initialize"}, |
| 12 | {0x00020000, nullptr, "Finalize"}, | ||
| 13 | {0x00030000, nullptr, "GetEventDesc"}, | ||
| 14 | {0x00040000, nullptr, "GetChannel"}, | ||
| 15 | {0x00050180, nullptr, "StartScan"}, | ||
| 16 | {0x00060000, nullptr, "StopScan"}, | ||
| 17 | {0x00070080, nullptr, "GetServerInfo"}, | ||
| 18 | {0x00080100, nullptr, "GetTitleInfo"}, | ||
| 19 | {0x00090040, nullptr, "GetTitleInfoInOrder"}, | ||
| 20 | {0x000A0080, nullptr, "DeleteScanInfo"}, | ||
| 21 | {0x000B0100, nullptr, "PrepareForSystemDownload"}, | ||
| 22 | {0x000C0000, nullptr, "StartSystemDownload"}, | ||
| 23 | {0x000D0100, nullptr, "StartTitleDownload"}, | ||
| 24 | {0x000E0000, nullptr, "GetMyStatus"}, | ||
| 25 | {0x000F0040, nullptr, "GetConnectingNodes"}, | ||
| 26 | {0x00100040, nullptr, "GetNodeInfo"}, | ||
| 27 | {0x00110000, nullptr, "GetWirelessRebootPassphrase"}, | ||
| 28 | {0x00120000, nullptr, "StopSession"}, | ||
| 29 | {0x00130100, nullptr, "GetCupVersion"}, | ||
| 30 | {0x00140100, nullptr, "GetDupAvailability"}, | ||
| 12 | }; | 31 | }; |
| 13 | 32 | ||
| 14 | DLP_CLNT_Interface::DLP_CLNT_Interface() { | 33 | DLP_CLNT_Interface::DLP_CLNT_Interface() { |
diff --git a/src/core/hle/service/dlp/dlp_fkcl.cpp b/src/core/hle/service/dlp/dlp_fkcl.cpp index 29b9d52e0..fe6be7d32 100644 --- a/src/core/hle/service/dlp/dlp_fkcl.cpp +++ b/src/core/hle/service/dlp/dlp_fkcl.cpp | |||
| @@ -8,7 +8,23 @@ namespace Service { | |||
| 8 | namespace DLP { | 8 | namespace DLP { |
| 9 | 9 | ||
| 10 | const Interface::FunctionInfo FunctionTable[] = { | 10 | const Interface::FunctionInfo FunctionTable[] = { |
| 11 | {0x00010083, nullptr, "Initialize"}, {0x000F0000, nullptr, "GetWirelessRebootPassphrase"}, | 11 | {0x00010083, nullptr, "Initialize"}, |
| 12 | {0x00020000, nullptr, "Finalize"}, | ||
| 13 | {0x00030000, nullptr, "GetEventDesc"}, | ||
| 14 | {0x00040000, nullptr, "GetChannels"}, | ||
| 15 | {0x00050180, nullptr, "StartScan"}, | ||
| 16 | {0x00060000, nullptr, "StopScan"}, | ||
| 17 | {0x00070080, nullptr, "GetServerInfo"}, | ||
| 18 | {0x00080100, nullptr, "GetTitleInfo"}, | ||
| 19 | {0x00090040, nullptr, "GetTitleInfoInOrder"}, | ||
| 20 | {0x000A0080, nullptr, "DeleteScanInfo"}, | ||
| 21 | {0x000B0100, nullptr, "StartFakeSession"}, | ||
| 22 | {0x000C0000, nullptr, "GetMyStatus"}, | ||
| 23 | {0x000D0040, nullptr, "GetConnectingNodes"}, | ||
| 24 | {0x000E0040, nullptr, "GetNodeInfo"}, | ||
| 25 | {0x000F0000, nullptr, "GetWirelessRebootPassphrase"}, | ||
| 26 | {0x00100000, nullptr, "StopSession"}, | ||
| 27 | {0x00110203, nullptr, "Initialize2"}, | ||
| 12 | }; | 28 | }; |
| 13 | 29 | ||
| 14 | DLP_FKCL_Interface::DLP_FKCL_Interface() { | 30 | DLP_FKCL_Interface::DLP_FKCL_Interface() { |
diff --git a/src/core/hle/service/dlp/dlp_srvr.cpp b/src/core/hle/service/dlp/dlp_srvr.cpp index 32cfa2c44..1bcea43d3 100644 --- a/src/core/hle/service/dlp/dlp_srvr.cpp +++ b/src/core/hle/service/dlp/dlp_srvr.cpp | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | namespace Service { | 11 | namespace Service { |
| 12 | namespace DLP { | 12 | namespace DLP { |
| 13 | 13 | ||
| 14 | static void unk_0x000E0040(Interface* self) { | 14 | static void IsChild(Interface* self) { |
| 15 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 15 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 16 | 16 | ||
| 17 | cmd_buff[1] = RESULT_SUCCESS.raw; | 17 | cmd_buff[1] = RESULT_SUCCESS.raw; |
| @@ -24,14 +24,19 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 24 | {0x00010183, nullptr, "Initialize"}, | 24 | {0x00010183, nullptr, "Initialize"}, |
| 25 | {0x00020000, nullptr, "Finalize"}, | 25 | {0x00020000, nullptr, "Finalize"}, |
| 26 | {0x00030000, nullptr, "GetServerState"}, | 26 | {0x00030000, nullptr, "GetServerState"}, |
| 27 | {0x00040000, nullptr, "GetEventDescription"}, | ||
| 27 | {0x00050080, nullptr, "StartAccepting"}, | 28 | {0x00050080, nullptr, "StartAccepting"}, |
| 29 | {0x00060000, nullptr, "EndAccepting"}, | ||
| 28 | {0x00070000, nullptr, "StartDistribution"}, | 30 | {0x00070000, nullptr, "StartDistribution"}, |
| 29 | {0x000800C0, nullptr, "SendWirelessRebootPassphrase"}, | 31 | {0x000800C0, nullptr, "SendWirelessRebootPassphrase"}, |
| 30 | {0x00090040, nullptr, "AcceptClient"}, | 32 | {0x00090040, nullptr, "AcceptClient"}, |
| 33 | {0x000A0040, nullptr, "DisconnectClient"}, | ||
| 31 | {0x000B0042, nullptr, "GetConnectingClients"}, | 34 | {0x000B0042, nullptr, "GetConnectingClients"}, |
| 32 | {0x000C0040, nullptr, "GetClientInfo"}, | 35 | {0x000C0040, nullptr, "GetClientInfo"}, |
| 33 | {0x000D0040, nullptr, "GetClientState"}, | 36 | {0x000D0040, nullptr, "GetClientState"}, |
| 34 | {0x000E0040, unk_0x000E0040, "unk_0x000E0040"}, | 37 | {0x000E0040, IsChild, "IsChild"}, |
| 38 | {0x000F0303, nullptr, "InitializeWithName"}, | ||
| 39 | {0x00100000, nullptr, "GetDupNoticeNeed"}, | ||
| 35 | }; | 40 | }; |
| 36 | 41 | ||
| 37 | DLP_SRVR_Interface::DLP_SRVR_Interface() { | 42 | DLP_SRVR_Interface::DLP_SRVR_Interface() { |
diff --git a/src/core/hle/service/dsp_dsp.cpp b/src/core/hle/service/dsp_dsp.cpp index 7d746054f..42f8950f9 100644 --- a/src/core/hle/service/dsp_dsp.cpp +++ b/src/core/hle/service/dsp_dsp.cpp | |||
| @@ -147,9 +147,10 @@ static void LoadComponent(Service::Interface* self) { | |||
| 147 | LOG_INFO(Service_DSP, "Firmware hash: %#" PRIx64, | 147 | LOG_INFO(Service_DSP, "Firmware hash: %#" PRIx64, |
| 148 | Common::ComputeHash64(component_data.data(), component_data.size())); | 148 | Common::ComputeHash64(component_data.data(), component_data.size())); |
| 149 | // Some versions of the firmware have the location of DSP structures listed here. | 149 | // Some versions of the firmware have the location of DSP structures listed here. |
| 150 | ASSERT(size > 0x37C); | 150 | if (size > 0x37C) { |
| 151 | LOG_INFO(Service_DSP, "Structures hash: %#" PRIx64, | 151 | LOG_INFO(Service_DSP, "Structures hash: %#" PRIx64, |
| 152 | Common::ComputeHash64(component_data.data() + 0x340, 60)); | 152 | Common::ComputeHash64(component_data.data() + 0x340, 60)); |
| 153 | } | ||
| 153 | 154 | ||
| 154 | LOG_WARNING(Service_DSP, | 155 | LOG_WARNING(Service_DSP, |
| 155 | "(STUBBED) called size=0x%X, prog_mask=0x%08X, data_mask=0x%08X, buffer=0x%08X", | 156 | "(STUBBED) called size=0x%X, prog_mask=0x%08X, data_mask=0x%08X, buffer=0x%08X", |
diff --git a/src/core/hle/service/fs/archive.cpp b/src/core/hle/service/fs/archive.cpp index 033fbc9aa..4ee7df73c 100644 --- a/src/core/hle/service/fs/archive.cpp +++ b/src/core/hle/service/fs/archive.cpp | |||
| @@ -20,6 +20,7 @@ | |||
| 20 | #include "core/file_sys/archive_savedata.h" | 20 | #include "core/file_sys/archive_savedata.h" |
| 21 | #include "core/file_sys/archive_sdmc.h" | 21 | #include "core/file_sys/archive_sdmc.h" |
| 22 | #include "core/file_sys/archive_sdmcwriteonly.h" | 22 | #include "core/file_sys/archive_sdmcwriteonly.h" |
| 23 | #include "core/file_sys/archive_selfncch.h" | ||
| 23 | #include "core/file_sys/archive_systemsavedata.h" | 24 | #include "core/file_sys/archive_systemsavedata.h" |
| 24 | #include "core/file_sys/directory_backend.h" | 25 | #include "core/file_sys/directory_backend.h" |
| 25 | #include "core/file_sys/errors.h" | 26 | #include "core/file_sys/errors.h" |
| @@ -48,7 +49,7 @@ struct hash<Service::FS::ArchiveIdCode> { | |||
| 48 | return std::hash<Type>()(static_cast<Type>(id_code)); | 49 | return std::hash<Type>()(static_cast<Type>(id_code)); |
| 49 | } | 50 | } |
| 50 | }; | 51 | }; |
| 51 | } | 52 | } // namespace std |
| 52 | 53 | ||
| 53 | static constexpr Kernel::Handle INVALID_HANDLE{}; | 54 | static constexpr Kernel::Handle INVALID_HANDLE{}; |
| 54 | 55 | ||
| @@ -216,7 +217,7 @@ void Directory::HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> serve | |||
| 216 | LOG_TRACE(Service_FS, "Read %s: count=%d", GetName().c_str(), count); | 217 | LOG_TRACE(Service_FS, "Read %s: count=%d", GetName().c_str(), count); |
| 217 | 218 | ||
| 218 | // Number of entries actually read | 219 | // Number of entries actually read |
| 219 | u32 read = backend->Read(entries.size(), entries.data()); | 220 | u32 read = backend->Read(static_cast<u32>(entries.size()), entries.data()); |
| 220 | cmd_buff[2] = read; | 221 | cmd_buff[2] = read; |
| 221 | Memory::WriteBlock(address, entries.data(), read * sizeof(FileSys::Entry)); | 222 | Memory::WriteBlock(address, entries.data(), read * sizeof(FileSys::Entry)); |
| 222 | break; | 223 | break; |
| @@ -564,6 +565,21 @@ void RegisterArchiveTypes() { | |||
| 564 | auto systemsavedata_factory = | 565 | auto systemsavedata_factory = |
| 565 | std::make_unique<FileSys::ArchiveFactory_SystemSaveData>(nand_directory); | 566 | std::make_unique<FileSys::ArchiveFactory_SystemSaveData>(nand_directory); |
| 566 | RegisterArchiveType(std::move(systemsavedata_factory), ArchiveIdCode::SystemSaveData); | 567 | RegisterArchiveType(std::move(systemsavedata_factory), ArchiveIdCode::SystemSaveData); |
| 568 | |||
| 569 | auto selfncch_factory = std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(); | ||
| 570 | RegisterArchiveType(std::move(selfncch_factory), ArchiveIdCode::SelfNCCH); | ||
| 571 | } | ||
| 572 | |||
| 573 | void RegisterSelfNCCH(Loader::AppLoader& app_loader) { | ||
| 574 | auto itr = id_code_map.find(ArchiveIdCode::SelfNCCH); | ||
| 575 | if (itr == id_code_map.end()) { | ||
| 576 | LOG_ERROR(Service_FS, | ||
| 577 | "Could not register a new NCCH because the SelfNCCH archive hasn't been created"); | ||
| 578 | return; | ||
| 579 | } | ||
| 580 | |||
| 581 | auto* factory = static_cast<FileSys::ArchiveFactory_SelfNCCH*>(itr->second.get()); | ||
| 582 | factory->Register(app_loader); | ||
| 567 | } | 583 | } |
| 568 | 584 | ||
| 569 | void UnregisterArchiveTypes() { | 585 | void UnregisterArchiveTypes() { |
diff --git a/src/core/hle/service/fs/archive.h b/src/core/hle/service/fs/archive.h index 3a3371c88..e3c8fc2ef 100644 --- a/src/core/hle/service/fs/archive.h +++ b/src/core/hle/service/fs/archive.h | |||
| @@ -21,6 +21,10 @@ static constexpr char SYSTEM_ID[]{"00000000000000000000000000000000"}; | |||
| 21 | /// The scrambled SD card CID, also known as ID1 | 21 | /// The scrambled SD card CID, also known as ID1 |
| 22 | static constexpr char SDCARD_ID[]{"00000000000000000000000000000000"}; | 22 | static constexpr char SDCARD_ID[]{"00000000000000000000000000000000"}; |
| 23 | 23 | ||
| 24 | namespace Loader { | ||
| 25 | class AppLoader; | ||
| 26 | } | ||
| 27 | |||
| 24 | namespace Service { | 28 | namespace Service { |
| 25 | namespace FS { | 29 | namespace FS { |
| 26 | 30 | ||
| @@ -259,6 +263,9 @@ void ArchiveInit(); | |||
| 259 | /// Shutdown archives | 263 | /// Shutdown archives |
| 260 | void ArchiveShutdown(); | 264 | void ArchiveShutdown(); |
| 261 | 265 | ||
| 266 | /// Registers a new NCCH file with the SelfNCCH archive factory | ||
| 267 | void RegisterSelfNCCH(Loader::AppLoader& app_loader); | ||
| 268 | |||
| 262 | /// Register all archive types | 269 | /// Register all archive types |
| 263 | void RegisterArchiveTypes(); | 270 | void RegisterArchiveTypes(); |
| 264 | 271 | ||
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 2014b8461..379fbd71c 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -7,8 +7,9 @@ | |||
| 7 | #include <cmath> | 7 | #include <cmath> |
| 8 | #include <memory> | 8 | #include <memory> |
| 9 | #include "common/logging/log.h" | 9 | #include "common/logging/log.h" |
| 10 | #include "core/3ds.h" | ||
| 11 | #include "core/core.h" | ||
| 10 | #include "core/core_timing.h" | 12 | #include "core/core_timing.h" |
| 11 | #include "core/frontend/emu_window.h" | ||
| 12 | #include "core/frontend/input.h" | 13 | #include "core/frontend/input.h" |
| 13 | #include "core/hle/ipc.h" | 14 | #include "core/hle/ipc.h" |
| 14 | #include "core/hle/kernel/event.h" | 15 | #include "core/hle/kernel/event.h" |
| @@ -18,7 +19,6 @@ | |||
| 18 | #include "core/hle/service/hid/hid_spvr.h" | 19 | #include "core/hle/service/hid/hid_spvr.h" |
| 19 | #include "core/hle/service/hid/hid_user.h" | 20 | #include "core/hle/service/hid/hid_user.h" |
| 20 | #include "core/hle/service/service.h" | 21 | #include "core/hle/service/service.h" |
| 21 | #include "video_core/video_core.h" | ||
| 22 | 22 | ||
| 23 | namespace Service { | 23 | namespace Service { |
| 24 | namespace HID { | 24 | namespace HID { |
| @@ -50,10 +50,15 @@ constexpr u64 pad_update_ticks = BASE_CLOCK_RATE_ARM11 / 234; | |||
| 50 | constexpr u64 accelerometer_update_ticks = BASE_CLOCK_RATE_ARM11 / 104; | 50 | constexpr u64 accelerometer_update_ticks = BASE_CLOCK_RATE_ARM11 / 104; |
| 51 | constexpr u64 gyroscope_update_ticks = BASE_CLOCK_RATE_ARM11 / 101; | 51 | constexpr u64 gyroscope_update_ticks = BASE_CLOCK_RATE_ARM11 / 101; |
| 52 | 52 | ||
| 53 | constexpr float accelerometer_coef = 512.0f; // measured from hw test result | ||
| 54 | constexpr float gyroscope_coef = 14.375f; // got from hwtest GetGyroscopeLowRawToDpsCoefficient call | ||
| 55 | |||
| 53 | static std::atomic<bool> is_device_reload_pending; | 56 | static std::atomic<bool> is_device_reload_pending; |
| 54 | static std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeButton::NUM_BUTTONS_HID> | 57 | static std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeButton::NUM_BUTTONS_HID> |
| 55 | buttons; | 58 | buttons; |
| 56 | static std::unique_ptr<Input::AnalogDevice> circle_pad; | 59 | static std::unique_ptr<Input::AnalogDevice> circle_pad; |
| 60 | static std::unique_ptr<Input::MotionDevice> motion_device; | ||
| 61 | static std::unique_ptr<Input::TouchDevice> touch_device; | ||
| 57 | 62 | ||
| 58 | DirectionState GetStickDirectionState(s16 circle_pad_x, s16 circle_pad_y) { | 63 | DirectionState GetStickDirectionState(s16 circle_pad_x, s16 circle_pad_y) { |
| 59 | // 30 degree and 60 degree are angular thresholds for directions | 64 | // 30 degree and 60 degree are angular thresholds for directions |
| @@ -90,6 +95,8 @@ static void LoadInputDevices() { | |||
| 90 | buttons.begin(), Input::CreateDevice<Input::ButtonDevice>); | 95 | buttons.begin(), Input::CreateDevice<Input::ButtonDevice>); |
| 91 | circle_pad = Input::CreateDevice<Input::AnalogDevice>( | 96 | circle_pad = Input::CreateDevice<Input::AnalogDevice>( |
| 92 | Settings::values.analogs[Settings::NativeAnalog::CirclePad]); | 97 | Settings::values.analogs[Settings::NativeAnalog::CirclePad]); |
| 98 | motion_device = Input::CreateDevice<Input::MotionDevice>(Settings::values.motion_device); | ||
| 99 | touch_device = Input::CreateDevice<Input::TouchDevice>(Settings::values.touch_device); | ||
| 93 | } | 100 | } |
| 94 | 101 | ||
| 95 | static void UnloadInputDevices() { | 102 | static void UnloadInputDevices() { |
| @@ -97,6 +104,8 @@ static void UnloadInputDevices() { | |||
| 97 | button.reset(); | 104 | button.reset(); |
| 98 | } | 105 | } |
| 99 | circle_pad.reset(); | 106 | circle_pad.reset(); |
| 107 | motion_device.reset(); | ||
| 108 | touch_device.reset(); | ||
| 100 | } | 109 | } |
| 101 | 110 | ||
| 102 | static void UpdatePadCallback(u64 userdata, int cycles_late) { | 111 | static void UpdatePadCallback(u64 userdata, int cycles_late) { |
| @@ -165,8 +174,10 @@ static void UpdatePadCallback(u64 userdata, int cycles_late) { | |||
| 165 | // Get the current touch entry | 174 | // Get the current touch entry |
| 166 | TouchDataEntry& touch_entry = mem->touch.entries[mem->touch.index]; | 175 | TouchDataEntry& touch_entry = mem->touch.entries[mem->touch.index]; |
| 167 | bool pressed = false; | 176 | bool pressed = false; |
| 168 | 177 | float x, y; | |
| 169 | std::tie(touch_entry.x, touch_entry.y, pressed) = VideoCore::g_emu_window->GetTouchState(); | 178 | std::tie(x, y, pressed) = touch_device->GetStatus(); |
| 179 | touch_entry.x = static_cast<u16>(x * Core::kScreenBottomWidth); | ||
| 180 | touch_entry.y = static_cast<u16>(y * Core::kScreenBottomHeight); | ||
| 170 | touch_entry.valid.Assign(pressed ? 1 : 0); | 181 | touch_entry.valid.Assign(pressed ? 1 : 0); |
| 171 | 182 | ||
| 172 | // TODO(bunnei): We're not doing anything with offset 0xA8 + 0x18 of HID SharedMemory, which | 183 | // TODO(bunnei): We're not doing anything with offset 0xA8 + 0x18 of HID SharedMemory, which |
| @@ -193,10 +204,19 @@ static void UpdateAccelerometerCallback(u64 userdata, int cycles_late) { | |||
| 193 | mem->accelerometer.index = next_accelerometer_index; | 204 | mem->accelerometer.index = next_accelerometer_index; |
| 194 | next_accelerometer_index = (next_accelerometer_index + 1) % mem->accelerometer.entries.size(); | 205 | next_accelerometer_index = (next_accelerometer_index + 1) % mem->accelerometer.entries.size(); |
| 195 | 206 | ||
| 207 | Math::Vec3<float> accel; | ||
| 208 | std::tie(accel, std::ignore) = motion_device->GetStatus(); | ||
| 209 | accel *= accelerometer_coef; | ||
| 210 | // TODO(wwylele): do a time stretch like the one in UpdateGyroscopeCallback | ||
| 211 | // The time stretch formula should be like | ||
| 212 | // stretched_vector = (raw_vector - gravity) * stretch_ratio + gravity | ||
| 213 | |||
| 196 | AccelerometerDataEntry& accelerometer_entry = | 214 | AccelerometerDataEntry& accelerometer_entry = |
| 197 | mem->accelerometer.entries[mem->accelerometer.index]; | 215 | mem->accelerometer.entries[mem->accelerometer.index]; |
| 198 | std::tie(accelerometer_entry.x, accelerometer_entry.y, accelerometer_entry.z) = | 216 | |
| 199 | VideoCore::g_emu_window->GetAccelerometerState(); | 217 | accelerometer_entry.x = static_cast<s16>(accel.x); |
| 218 | accelerometer_entry.y = static_cast<s16>(accel.y); | ||
| 219 | accelerometer_entry.z = static_cast<s16>(accel.z); | ||
| 200 | 220 | ||
| 201 | // Make up "raw" entry | 221 | // Make up "raw" entry |
| 202 | // TODO(wwylele): | 222 | // TODO(wwylele): |
| @@ -227,8 +247,14 @@ static void UpdateGyroscopeCallback(u64 userdata, int cycles_late) { | |||
| 227 | next_gyroscope_index = (next_gyroscope_index + 1) % mem->gyroscope.entries.size(); | 247 | next_gyroscope_index = (next_gyroscope_index + 1) % mem->gyroscope.entries.size(); |
| 228 | 248 | ||
| 229 | GyroscopeDataEntry& gyroscope_entry = mem->gyroscope.entries[mem->gyroscope.index]; | 249 | GyroscopeDataEntry& gyroscope_entry = mem->gyroscope.entries[mem->gyroscope.index]; |
| 230 | std::tie(gyroscope_entry.x, gyroscope_entry.y, gyroscope_entry.z) = | 250 | |
| 231 | VideoCore::g_emu_window->GetGyroscopeState(); | 251 | Math::Vec3<float> gyro; |
| 252 | std::tie(std::ignore, gyro) = motion_device->GetStatus(); | ||
| 253 | double stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale(); | ||
| 254 | gyro *= gyroscope_coef * static_cast<float>(stretch); | ||
| 255 | gyroscope_entry.x = static_cast<s16>(gyro.x); | ||
| 256 | gyroscope_entry.y = static_cast<s16>(gyro.y); | ||
| 257 | gyroscope_entry.z = static_cast<s16>(gyro.z); | ||
| 232 | 258 | ||
| 233 | // Make up "raw" entry | 259 | // Make up "raw" entry |
| 234 | mem->gyroscope.raw_entry.x = gyroscope_entry.x; | 260 | mem->gyroscope.raw_entry.x = gyroscope_entry.x; |
| @@ -326,7 +352,7 @@ void GetGyroscopeLowRawToDpsCoefficient(Service::Interface* self) { | |||
| 326 | 352 | ||
| 327 | cmd_buff[1] = RESULT_SUCCESS.raw; | 353 | cmd_buff[1] = RESULT_SUCCESS.raw; |
| 328 | 354 | ||
| 329 | f32 coef = VideoCore::g_emu_window->GetGyroscopeRawToDpsCoefficient(); | 355 | f32 coef = gyroscope_coef; |
| 330 | memcpy(&cmd_buff[2], &coef, 4); | 356 | memcpy(&cmd_buff[2], &coef, 4); |
| 331 | } | 357 | } |
| 332 | 358 | ||
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 1ef972e70..ef25926b5 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h | |||
| @@ -24,7 +24,7 @@ namespace HID { | |||
| 24 | */ | 24 | */ |
| 25 | struct PadState { | 25 | struct PadState { |
| 26 | union { | 26 | union { |
| 27 | u32 hex; | 27 | u32 hex{}; |
| 28 | 28 | ||
| 29 | BitField<0, 1, u32> a; | 29 | BitField<0, 1, u32> a; |
| 30 | BitField<1, 1, u32> b; | 30 | BitField<1, 1, u32> b; |
diff --git a/src/core/hle/service/ir/ir_rst.cpp b/src/core/hle/service/ir/ir_rst.cpp index 837413f93..0912d5756 100644 --- a/src/core/hle/service/ir/ir_rst.cpp +++ b/src/core/hle/service/ir/ir_rst.cpp | |||
| @@ -18,7 +18,7 @@ namespace Service { | |||
| 18 | namespace IR { | 18 | namespace IR { |
| 19 | 19 | ||
| 20 | union PadState { | 20 | union PadState { |
| 21 | u32_le hex; | 21 | u32_le hex{}; |
| 22 | 22 | ||
| 23 | BitField<14, 1, u32_le> zl; | 23 | BitField<14, 1, u32_le> zl; |
| 24 | BitField<15, 1, u32_le> zr; | 24 | BitField<15, 1, u32_le> zr; |
diff --git a/src/core/hle/service/ldr_ro/cro_helper.h b/src/core/hle/service/ldr_ro/cro_helper.h index 3bc10dbdc..57b4fb6df 100644 --- a/src/core/hle/service/ldr_ro/cro_helper.h +++ b/src/core/hle/service/ldr_ro/cro_helper.h | |||
| @@ -413,7 +413,8 @@ private: | |||
| 413 | */ | 413 | */ |
| 414 | template <typename T> | 414 | template <typename T> |
| 415 | void GetEntry(std::size_t index, T& data) const { | 415 | void GetEntry(std::size_t index, T& data) const { |
| 416 | Memory::ReadBlock(GetField(T::TABLE_OFFSET_FIELD) + index * sizeof(T), &data, sizeof(T)); | 416 | Memory::ReadBlock(GetField(T::TABLE_OFFSET_FIELD) + static_cast<u32>(index * sizeof(T)), |
| 417 | &data, sizeof(T)); | ||
| 417 | } | 418 | } |
| 418 | 419 | ||
| 419 | /** | 420 | /** |
| @@ -425,7 +426,8 @@ private: | |||
| 425 | */ | 426 | */ |
| 426 | template <typename T> | 427 | template <typename T> |
| 427 | void SetEntry(std::size_t index, const T& data) { | 428 | void SetEntry(std::size_t index, const T& data) { |
| 428 | Memory::WriteBlock(GetField(T::TABLE_OFFSET_FIELD) + index * sizeof(T), &data, sizeof(T)); | 429 | Memory::WriteBlock(GetField(T::TABLE_OFFSET_FIELD) + static_cast<u32>(index * sizeof(T)), |
| 430 | &data, sizeof(T)); | ||
| 429 | } | 431 | } |
| 430 | 432 | ||
| 431 | /** | 433 | /** |
diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp index d5624fe54..b10d5852b 100644 --- a/src/core/hle/service/nim/nim.cpp +++ b/src/core/hle/service/nim/nim.cpp | |||
| @@ -5,6 +5,8 @@ | |||
| 5 | #include "common/common_types.h" | 5 | #include "common/common_types.h" |
| 6 | #include "common/logging/log.h" | 6 | #include "common/logging/log.h" |
| 7 | #include "core/hle/ipc.h" | 7 | #include "core/hle/ipc.h" |
| 8 | #include "core/hle/ipc_helpers.h" | ||
| 9 | #include "core/hle/kernel/event.h" | ||
| 8 | #include "core/hle/service/nim/nim.h" | 10 | #include "core/hle/service/nim/nim.h" |
| 9 | #include "core/hle/service/nim/nim_aoc.h" | 11 | #include "core/hle/service/nim/nim_aoc.h" |
| 10 | #include "core/hle/service/nim/nim_s.h" | 12 | #include "core/hle/service/nim/nim_s.h" |
| @@ -14,6 +16,16 @@ | |||
| 14 | namespace Service { | 16 | namespace Service { |
| 15 | namespace NIM { | 17 | namespace NIM { |
| 16 | 18 | ||
| 19 | static Kernel::SharedPtr<Kernel::Event> nim_system_update_event; | ||
| 20 | |||
| 21 | void CheckForSysUpdateEvent(Service::Interface* self) { | ||
| 22 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x5, 0, 0); // 0x50000 | ||
| 23 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); | ||
| 24 | rb.Push(RESULT_SUCCESS); | ||
| 25 | rb.PushCopyHandles(Kernel::g_handle_table.Create(nim_system_update_event).Unwrap()); | ||
| 26 | LOG_TRACE(Service_NIM, "called"); | ||
| 27 | } | ||
| 28 | |||
| 17 | void CheckSysUpdateAvailable(Service::Interface* self) { | 29 | void CheckSysUpdateAvailable(Service::Interface* self) { |
| 18 | u32* cmd_buff = Kernel::GetCommandBuffer(); | 30 | u32* cmd_buff = Kernel::GetCommandBuffer(); |
| 19 | 31 | ||
| @@ -29,9 +41,13 @@ void Init() { | |||
| 29 | AddService(new NIM_AOC_Interface); | 41 | AddService(new NIM_AOC_Interface); |
| 30 | AddService(new NIM_S_Interface); | 42 | AddService(new NIM_S_Interface); |
| 31 | AddService(new NIM_U_Interface); | 43 | AddService(new NIM_U_Interface); |
| 44 | |||
| 45 | nim_system_update_event = Kernel::Event::Create(ResetType::OneShot, "NIM System Update Event"); | ||
| 32 | } | 46 | } |
| 33 | 47 | ||
| 34 | void Shutdown() {} | 48 | void Shutdown() { |
| 49 | nim_system_update_event = nullptr; | ||
| 50 | } | ||
| 35 | 51 | ||
| 36 | } // namespace NIM | 52 | } // namespace NIM |
| 37 | 53 | ||
diff --git a/src/core/hle/service/nim/nim.h b/src/core/hle/service/nim/nim.h index c3106f18b..dbf605e5a 100644 --- a/src/core/hle/service/nim/nim.h +++ b/src/core/hle/service/nim/nim.h | |||
| @@ -11,6 +11,17 @@ class Interface; | |||
| 11 | namespace NIM { | 11 | namespace NIM { |
| 12 | 12 | ||
| 13 | /** | 13 | /** |
| 14 | * NIM::CheckForSysUpdateEvent service function | ||
| 15 | * Inputs: | ||
| 16 | * 1 : None | ||
| 17 | * Outputs: | ||
| 18 | * 1 : Result of function, 0 on success, otherwise error code | ||
| 19 | * 2 : Copy handle descriptor | ||
| 20 | * 3 : System Update event handle | ||
| 21 | */ | ||
| 22 | void CheckForSysUpdateEvent(Service::Interface* self); | ||
| 23 | |||
| 24 | /** | ||
| 14 | * NIM::CheckSysUpdateAvailable service function | 25 | * NIM::CheckSysUpdateAvailable service function |
| 15 | * Inputs: | 26 | * Inputs: |
| 16 | * 1 : None | 27 | * 1 : None |
diff --git a/src/core/hle/service/nim/nim_u.cpp b/src/core/hle/service/nim/nim_u.cpp index 7664bad60..569660278 100644 --- a/src/core/hle/service/nim/nim_u.cpp +++ b/src/core/hle/service/nim/nim_u.cpp | |||
| @@ -12,7 +12,7 @@ const Interface::FunctionInfo FunctionTable[] = { | |||
| 12 | {0x00010000, nullptr, "StartSysUpdate"}, | 12 | {0x00010000, nullptr, "StartSysUpdate"}, |
| 13 | {0x00020000, nullptr, "GetUpdateDownloadProgress"}, | 13 | {0x00020000, nullptr, "GetUpdateDownloadProgress"}, |
| 14 | {0x00040000, nullptr, "FinishTitlesInstall"}, | 14 | {0x00040000, nullptr, "FinishTitlesInstall"}, |
| 15 | {0x00050000, nullptr, "CheckForSysUpdateEvent"}, | 15 | {0x00050000, CheckForSysUpdateEvent, "CheckForSysUpdateEvent"}, |
| 16 | {0x00090000, CheckSysUpdateAvailable, "CheckSysUpdateAvailable"}, | 16 | {0x00090000, CheckSysUpdateAvailable, "CheckSysUpdateAvailable"}, |
| 17 | {0x000A0000, nullptr, "GetState"}, | 17 | {0x000A0000, nullptr, "GetState"}, |
| 18 | {0x000B0000, nullptr, "GetSystemTitleHash"}, | 18 | {0x000B0000, nullptr, "GetSystemTitleHash"}, |
diff --git a/src/core/hle/service/ns/ns.cpp b/src/core/hle/service/ns/ns.cpp new file mode 100644 index 000000000..9e19c38bf --- /dev/null +++ b/src/core/hle/service/ns/ns.cpp | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "core/hle/service/ns/ns.h" | ||
| 6 | #include "core/hle/service/ns/ns_s.h" | ||
| 7 | |||
| 8 | namespace Service { | ||
| 9 | namespace NS { | ||
| 10 | |||
| 11 | void InstallInterfaces(SM::ServiceManager& service_manager) { | ||
| 12 | std::make_shared<NS_S>()->InstallAsService(service_manager); | ||
| 13 | } | ||
| 14 | |||
| 15 | } // namespace NS | ||
| 16 | } // namespace Service | ||
diff --git a/src/core/hle/service/ns/ns.h b/src/core/hle/service/ns/ns.h new file mode 100644 index 000000000..c3d67d98c --- /dev/null +++ b/src/core/hle/service/ns/ns.h | |||
| @@ -0,0 +1,16 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "core/hle/service/service.h" | ||
| 8 | |||
| 9 | namespace Service { | ||
| 10 | namespace NS { | ||
| 11 | |||
| 12 | /// Registers all NS services with the specified service manager. | ||
| 13 | void InstallInterfaces(SM::ServiceManager& service_manager); | ||
| 14 | |||
| 15 | } // namespace NS | ||
| 16 | } // namespace Service | ||
diff --git a/src/core/hle/service/ns/ns_s.cpp b/src/core/hle/service/ns/ns_s.cpp new file mode 100644 index 000000000..d952888dc --- /dev/null +++ b/src/core/hle/service/ns/ns_s.cpp | |||
| @@ -0,0 +1,34 @@ | |||
| 1 | // Copyright 2015 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "core/hle/service/ns/ns_s.h" | ||
| 6 | |||
| 7 | namespace Service { | ||
| 8 | namespace NS { | ||
| 9 | |||
| 10 | NS_S::NS_S() : ServiceFramework("ns:s", 2) { | ||
| 11 | static const FunctionInfo functions[] = { | ||
| 12 | {0x000100C0, nullptr, "LaunchFIRM"}, | ||
| 13 | {0x000200C0, nullptr, "LaunchTitle"}, | ||
| 14 | {0x00030000, nullptr, "TerminateApplication"}, | ||
| 15 | {0x00040040, nullptr, "TerminateProcess"}, | ||
| 16 | {0x000500C0, nullptr, "LaunchApplicationFIRM"}, | ||
| 17 | {0x00060042, nullptr, "SetFIRMParams4A0"}, | ||
| 18 | {0x00070042, nullptr, "CardUpdateInitialize"}, | ||
| 19 | {0x00080000, nullptr, "CardUpdateShutdown"}, | ||
| 20 | {0x000D0140, nullptr, "SetTWLBannerHMAC"}, | ||
| 21 | {0x000E0000, nullptr, "ShutdownAsync"}, | ||
| 22 | {0x00100180, nullptr, "RebootSystem"}, | ||
| 23 | {0x00110100, nullptr, "TerminateTitle"}, | ||
| 24 | {0x001200C0, nullptr, "SetApplicationCpuTimeLimit"}, | ||
| 25 | {0x00150140, nullptr, "LaunchApplication"}, | ||
| 26 | {0x00160000, nullptr, "RebootSystemClean"}, | ||
| 27 | }; | ||
| 28 | RegisterHandlers(functions); | ||
| 29 | } | ||
| 30 | |||
| 31 | NS_S::~NS_S() = default; | ||
| 32 | |||
| 33 | } // namespace NS | ||
| 34 | } // namespace Service | ||
diff --git a/src/core/hle/service/ns_s.h b/src/core/hle/service/ns/ns_s.h index 90288a521..660ae453f 100644 --- a/src/core/hle/service/ns_s.h +++ b/src/core/hle/service/ns/ns_s.h | |||
| @@ -4,18 +4,17 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include "core/hle/kernel/kernel.h" | ||
| 7 | #include "core/hle/service/service.h" | 8 | #include "core/hle/service/service.h" |
| 8 | 9 | ||
| 9 | namespace Service { | 10 | namespace Service { |
| 10 | namespace NS { | 11 | namespace NS { |
| 11 | 12 | ||
| 12 | class NS_S final : public Interface { | 13 | /// Interface to "ns:s" service |
| 14 | class NS_S final : public ServiceFramework<NS_S> { | ||
| 13 | public: | 15 | public: |
| 14 | NS_S(); | 16 | NS_S(); |
| 15 | 17 | ~NS_S(); | |
| 16 | std::string GetPortName() const override { | ||
| 17 | return "ns:s"; | ||
| 18 | } | ||
| 19 | }; | 18 | }; |
| 20 | 19 | ||
| 21 | } // namespace NS | 20 | } // namespace NS |
diff --git a/src/core/hle/service/ns_s.cpp b/src/core/hle/service/ns_s.cpp deleted file mode 100644 index 215c9aacc..000000000 --- a/src/core/hle/service/ns_s.cpp +++ /dev/null | |||
| @@ -1,33 +0,0 @@ | |||
| 1 | // Copyright 2015 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "core/hle/service/ns_s.h" | ||
| 6 | |||
| 7 | namespace Service { | ||
| 8 | namespace NS { | ||
| 9 | |||
| 10 | const Interface::FunctionInfo FunctionTable[] = { | ||
| 11 | {0x000100C0, nullptr, "LaunchFIRM"}, | ||
| 12 | {0x000200C0, nullptr, "LaunchTitle"}, | ||
| 13 | {0x00030000, nullptr, "TerminateApplication"}, | ||
| 14 | {0x00040040, nullptr, "TerminateProcess"}, | ||
| 15 | {0x000500C0, nullptr, "LaunchApplicationFIRM"}, | ||
| 16 | {0x00060042, nullptr, "SetFIRMParams4A0"}, | ||
| 17 | {0x00070042, nullptr, "CardUpdateInitialize"}, | ||
| 18 | {0x00080000, nullptr, "CardUpdateShutdown"}, | ||
| 19 | {0x000D0140, nullptr, "SetTWLBannerHMAC"}, | ||
| 20 | {0x000E0000, nullptr, "ShutdownAsync"}, | ||
| 21 | {0x00100180, nullptr, "RebootSystem"}, | ||
| 22 | {0x00110100, nullptr, "TerminateTitle"}, | ||
| 23 | {0x001200C0, nullptr, "SetApplicationCpuTimeLimit"}, | ||
| 24 | {0x00150140, nullptr, "LaunchApplication"}, | ||
| 25 | {0x00160000, nullptr, "RebootSystemClean"}, | ||
| 26 | }; | ||
| 27 | |||
| 28 | NS_S::NS_S() { | ||
| 29 | Register(FunctionTable); | ||
| 30 | } | ||
| 31 | |||
| 32 | } // namespace NS | ||
| 33 | } // namespace Service | ||
diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp index 6dbdff044..87a6b0eca 100644 --- a/src/core/hle/service/nwm/nwm_uds.cpp +++ b/src/core/hle/service/nwm/nwm_uds.cpp | |||
| @@ -2,8 +2,11 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <algorithm> | ||
| 5 | #include <array> | 6 | #include <array> |
| 6 | #include <cstring> | 7 | #include <cstring> |
| 8 | #include <list> | ||
| 9 | #include <mutex> | ||
| 7 | #include <unordered_map> | 10 | #include <unordered_map> |
| 8 | #include <vector> | 11 | #include <vector> |
| 9 | #include "common/common_types.h" | 12 | #include "common/common_types.h" |
| @@ -12,11 +15,14 @@ | |||
| 12 | #include "core/hle/ipc_helpers.h" | 15 | #include "core/hle/ipc_helpers.h" |
| 13 | #include "core/hle/kernel/event.h" | 16 | #include "core/hle/kernel/event.h" |
| 14 | #include "core/hle/kernel/shared_memory.h" | 17 | #include "core/hle/kernel/shared_memory.h" |
| 18 | #include "core/hle/lock.h" | ||
| 15 | #include "core/hle/result.h" | 19 | #include "core/hle/result.h" |
| 16 | #include "core/hle/service/nwm/nwm_uds.h" | 20 | #include "core/hle/service/nwm/nwm_uds.h" |
| 17 | #include "core/hle/service/nwm/uds_beacon.h" | 21 | #include "core/hle/service/nwm/uds_beacon.h" |
| 22 | #include "core/hle/service/nwm/uds_connection.h" | ||
| 18 | #include "core/hle/service/nwm/uds_data.h" | 23 | #include "core/hle/service/nwm/uds_data.h" |
| 19 | #include "core/memory.h" | 24 | #include "core/memory.h" |
| 25 | #include "network/network.h" | ||
| 20 | 26 | ||
| 21 | namespace Service { | 27 | namespace Service { |
| 22 | namespace NWM { | 28 | namespace NWM { |
| @@ -34,9 +40,12 @@ static ConnectionStatus connection_status{}; | |||
| 34 | /* Node information about the current network. | 40 | /* Node information about the current network. |
| 35 | * The amount of elements in this vector is always the maximum number | 41 | * The amount of elements in this vector is always the maximum number |
| 36 | * of nodes specified in the network configuration. | 42 | * of nodes specified in the network configuration. |
| 37 | * The first node is always the host, so this always contains at least 1 entry. | 43 | * The first node is always the host. |
| 38 | */ | 44 | */ |
| 39 | static NodeList node_info(1); | 45 | static NodeList node_info; |
| 46 | |||
| 47 | // Node information about our own system. | ||
| 48 | static NodeInfo current_node; | ||
| 40 | 49 | ||
| 41 | // Mapping of bind node ids to their respective events. | 50 | // Mapping of bind node ids to their respective events. |
| 42 | static std::unordered_map<u32, Kernel::SharedPtr<Kernel::Event>> bind_node_events; | 51 | static std::unordered_map<u32, Kernel::SharedPtr<Kernel::Event>> bind_node_events; |
| @@ -51,6 +60,298 @@ static NetworkInfo network_info; | |||
| 51 | // Event that will generate and send the 802.11 beacon frames. | 60 | // Event that will generate and send the 802.11 beacon frames. |
| 52 | static int beacon_broadcast_event; | 61 | static int beacon_broadcast_event; |
| 53 | 62 | ||
| 63 | // Mutex to synchronize access to the connection status between the emulation thread and the | ||
| 64 | // network thread. | ||
| 65 | static std::mutex connection_status_mutex; | ||
| 66 | |||
| 67 | // Mutex to synchronize access to the list of received beacons between the emulation thread and the | ||
| 68 | // network thread. | ||
| 69 | static std::mutex beacon_mutex; | ||
| 70 | |||
| 71 | // Number of beacons to store before we start dropping the old ones. | ||
| 72 | // TODO(Subv): Find a more accurate value for this limit. | ||
| 73 | constexpr size_t MaxBeaconFrames = 15; | ||
| 74 | |||
| 75 | // List of the last <MaxBeaconFrames> beacons received from the network. | ||
| 76 | static std::list<Network::WifiPacket> received_beacons; | ||
| 77 | |||
| 78 | /** | ||
| 79 | * Returns a list of received 802.11 beacon frames from the specified sender since the last call. | ||
| 80 | */ | ||
| 81 | std::list<Network::WifiPacket> GetReceivedBeacons(const MacAddress& sender) { | ||
| 82 | std::lock_guard<std::mutex> lock(beacon_mutex); | ||
| 83 | if (sender != Network::BroadcastMac) { | ||
| 84 | std::list<Network::WifiPacket> filtered_list; | ||
| 85 | const auto beacon = std::find_if(received_beacons.begin(), received_beacons.end(), | ||
| 86 | [&sender](const Network::WifiPacket& packet) { | ||
| 87 | return packet.transmitter_address == sender; | ||
| 88 | }); | ||
| 89 | if (beacon != received_beacons.end()) { | ||
| 90 | filtered_list.push_back(*beacon); | ||
| 91 | // TODO(B3N30): Check if the complete deque is cleared or just the fetched entries | ||
| 92 | received_beacons.erase(beacon); | ||
| 93 | } | ||
| 94 | return filtered_list; | ||
| 95 | } | ||
| 96 | return std::move(received_beacons); | ||
| 97 | } | ||
| 98 | |||
| 99 | /// Sends a WifiPacket to the room we're currently connected to. | ||
| 100 | void SendPacket(Network::WifiPacket& packet) { | ||
| 101 | // TODO(Subv): Implement. | ||
| 102 | } | ||
| 103 | |||
| 104 | /* | ||
| 105 | * Returns an available index in the nodes array for the | ||
| 106 | * currently-hosted UDS network. | ||
| 107 | */ | ||
| 108 | static u16 GetNextAvailableNodeId() { | ||
| 109 | for (u16 index = 0; index < connection_status.max_nodes; ++index) { | ||
| 110 | if ((connection_status.node_bitmask & (1 << index)) == 0) | ||
| 111 | return index; | ||
| 112 | } | ||
| 113 | |||
| 114 | // Any connection attempts to an already full network should have been refused. | ||
| 115 | ASSERT_MSG(false, "No available connection slots in the network"); | ||
| 116 | } | ||
| 117 | |||
| 118 | // Inserts the received beacon frame in the beacon queue and removes any older beacons if the size | ||
| 119 | // limit is exceeded. | ||
| 120 | void HandleBeaconFrame(const Network::WifiPacket& packet) { | ||
| 121 | std::lock_guard<std::mutex> lock(beacon_mutex); | ||
| 122 | const auto unique_beacon = | ||
| 123 | std::find_if(received_beacons.begin(), received_beacons.end(), | ||
| 124 | [&packet](const Network::WifiPacket& new_packet) { | ||
| 125 | return new_packet.transmitter_address == packet.transmitter_address; | ||
| 126 | }); | ||
| 127 | if (unique_beacon != received_beacons.end()) { | ||
| 128 | // We already have a beacon from the same mac in the deque, remove the old one; | ||
| 129 | received_beacons.erase(unique_beacon); | ||
| 130 | } | ||
| 131 | |||
| 132 | received_beacons.emplace_back(packet); | ||
| 133 | |||
| 134 | // Discard old beacons if the buffer is full. | ||
| 135 | if (received_beacons.size() > MaxBeaconFrames) | ||
| 136 | received_beacons.pop_front(); | ||
| 137 | } | ||
| 138 | |||
| 139 | void HandleAssociationResponseFrame(const Network::WifiPacket& packet) { | ||
| 140 | auto assoc_result = GetAssociationResult(packet.data); | ||
| 141 | |||
| 142 | ASSERT_MSG(std::get<AssocStatus>(assoc_result) == AssocStatus::Successful, | ||
| 143 | "Could not join network"); | ||
| 144 | { | ||
| 145 | std::lock_guard<std::mutex> lock(connection_status_mutex); | ||
| 146 | ASSERT(connection_status.status == static_cast<u32>(NetworkStatus::Connecting)); | ||
| 147 | } | ||
| 148 | |||
| 149 | // Send the EAPoL-Start packet to the server. | ||
| 150 | using Network::WifiPacket; | ||
| 151 | WifiPacket eapol_start; | ||
| 152 | eapol_start.channel = network_channel; | ||
| 153 | eapol_start.data = GenerateEAPoLStartFrame(std::get<u16>(assoc_result), current_node); | ||
| 154 | // TODO(B3N30): Encrypt the packet. | ||
| 155 | eapol_start.destination_address = packet.transmitter_address; | ||
| 156 | eapol_start.type = WifiPacket::PacketType::Data; | ||
| 157 | |||
| 158 | SendPacket(eapol_start); | ||
| 159 | } | ||
| 160 | |||
| 161 | static void HandleEAPoLPacket(const Network::WifiPacket& packet) { | ||
| 162 | std::lock_guard<std::mutex> lock(connection_status_mutex); | ||
| 163 | |||
| 164 | if (GetEAPoLFrameType(packet.data) == EAPoLStartMagic) { | ||
| 165 | if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) { | ||
| 166 | LOG_DEBUG(Service_NWM, "Connection sequence aborted, because connection status is %u", | ||
| 167 | connection_status.status); | ||
| 168 | return; | ||
| 169 | } | ||
| 170 | |||
| 171 | auto node = DeserializeNodeInfoFromFrame(packet.data); | ||
| 172 | |||
| 173 | if (connection_status.max_nodes == connection_status.total_nodes) { | ||
| 174 | // Reject connection attempt | ||
| 175 | LOG_ERROR(Service_NWM, "Reached maximum nodes, but reject packet wasn't sent."); | ||
| 176 | // TODO(B3N30): Figure out what packet is sent here | ||
| 177 | return; | ||
| 178 | } | ||
| 179 | |||
| 180 | // Get an unused network node id | ||
| 181 | u16 node_id = GetNextAvailableNodeId(); | ||
| 182 | node.network_node_id = node_id + 1; | ||
| 183 | |||
| 184 | connection_status.node_bitmask |= 1 << node_id; | ||
| 185 | connection_status.changed_nodes |= 1 << node_id; | ||
| 186 | connection_status.nodes[node_id] = node.network_node_id; | ||
| 187 | connection_status.total_nodes++; | ||
| 188 | |||
| 189 | u8 current_nodes = network_info.total_nodes; | ||
| 190 | node_info[current_nodes] = node; | ||
| 191 | |||
| 192 | network_info.total_nodes++; | ||
| 193 | |||
| 194 | // Send the EAPoL-Logoff packet. | ||
| 195 | using Network::WifiPacket; | ||
| 196 | WifiPacket eapol_logoff; | ||
| 197 | eapol_logoff.channel = network_channel; | ||
| 198 | eapol_logoff.data = | ||
| 199 | GenerateEAPoLLogoffFrame(packet.transmitter_address, node.network_node_id, node_info, | ||
| 200 | network_info.max_nodes, network_info.total_nodes); | ||
| 201 | // TODO(Subv): Encrypt the packet. | ||
| 202 | eapol_logoff.destination_address = packet.transmitter_address; | ||
| 203 | eapol_logoff.type = WifiPacket::PacketType::Data; | ||
| 204 | |||
| 205 | SendPacket(eapol_logoff); | ||
| 206 | // TODO(B3N30): Broadcast updated node list | ||
| 207 | // The 3ds does this presumably to support spectators. | ||
| 208 | std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock); | ||
| 209 | connection_status_event->Signal(); | ||
| 210 | } else { | ||
| 211 | if (connection_status.status != static_cast<u32>(NetworkStatus::NotConnected)) { | ||
| 212 | LOG_DEBUG(Service_NWM, "Connection sequence aborted, because connection status is %u", | ||
| 213 | connection_status.status); | ||
| 214 | return; | ||
| 215 | } | ||
| 216 | auto logoff = ParseEAPoLLogoffFrame(packet.data); | ||
| 217 | |||
| 218 | network_info.total_nodes = logoff.connected_nodes; | ||
| 219 | network_info.max_nodes = logoff.max_nodes; | ||
| 220 | |||
| 221 | connection_status.network_node_id = logoff.assigned_node_id; | ||
| 222 | connection_status.total_nodes = logoff.connected_nodes; | ||
| 223 | connection_status.max_nodes = logoff.max_nodes; | ||
| 224 | |||
| 225 | node_info.clear(); | ||
| 226 | node_info.reserve(network_info.max_nodes); | ||
| 227 | for (size_t index = 0; index < logoff.connected_nodes; ++index) { | ||
| 228 | connection_status.node_bitmask |= 1 << index; | ||
| 229 | connection_status.changed_nodes |= 1 << index; | ||
| 230 | connection_status.nodes[index] = logoff.nodes[index].network_node_id; | ||
| 231 | |||
| 232 | node_info.emplace_back(DeserializeNodeInfo(logoff.nodes[index])); | ||
| 233 | } | ||
| 234 | |||
| 235 | // We're now connected, signal the application | ||
| 236 | connection_status.status = static_cast<u32>(NetworkStatus::ConnectedAsClient); | ||
| 237 | // Some games require ConnectToNetwork to block, for now it doesn't | ||
| 238 | // If blocking is implemented this lock needs to be changed, | ||
| 239 | // otherwise it might cause deadlocks | ||
| 240 | std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock); | ||
| 241 | connection_status_event->Signal(); | ||
| 242 | } | ||
| 243 | } | ||
| 244 | |||
| 245 | /* | ||
| 246 | * Start a connection sequence with an UDS server. The sequence starts by sending an 802.11 | ||
| 247 | * authentication frame with SEQ1. | ||
| 248 | */ | ||
| 249 | void StartConnectionSequence(const MacAddress& server) { | ||
| 250 | using Network::WifiPacket; | ||
| 251 | WifiPacket auth_request; | ||
| 252 | { | ||
| 253 | std::lock_guard<std::mutex> lock(connection_status_mutex); | ||
| 254 | ASSERT(connection_status.status == static_cast<u32>(NetworkStatus::NotConnected)); | ||
| 255 | |||
| 256 | // TODO(Subv): Handle timeout. | ||
| 257 | |||
| 258 | // Send an authentication frame with SEQ1 | ||
| 259 | auth_request.channel = network_channel; | ||
| 260 | auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ1); | ||
| 261 | auth_request.destination_address = server; | ||
| 262 | auth_request.type = WifiPacket::PacketType::Authentication; | ||
| 263 | } | ||
| 264 | |||
| 265 | SendPacket(auth_request); | ||
| 266 | } | ||
| 267 | |||
| 268 | /// Sends an Association Response frame to the specified mac address | ||
| 269 | void SendAssociationResponseFrame(const MacAddress& address) { | ||
| 270 | using Network::WifiPacket; | ||
| 271 | WifiPacket assoc_response; | ||
| 272 | |||
| 273 | { | ||
| 274 | std::lock_guard<std::mutex> lock(connection_status_mutex); | ||
| 275 | if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) { | ||
| 276 | LOG_ERROR(Service_NWM, "Connection sequence aborted, because connection status is %u", | ||
| 277 | connection_status.status); | ||
| 278 | return; | ||
| 279 | } | ||
| 280 | |||
| 281 | assoc_response.channel = network_channel; | ||
| 282 | // TODO(Subv): This will cause multiple clients to end up with the same association id, but | ||
| 283 | // we're not using that for anything. | ||
| 284 | u16 association_id = 1; | ||
| 285 | assoc_response.data = GenerateAssocResponseFrame(AssocStatus::Successful, association_id, | ||
| 286 | network_info.network_id); | ||
| 287 | assoc_response.destination_address = address; | ||
| 288 | assoc_response.type = WifiPacket::PacketType::AssociationResponse; | ||
| 289 | } | ||
| 290 | |||
| 291 | SendPacket(assoc_response); | ||
| 292 | } | ||
| 293 | |||
| 294 | /* | ||
| 295 | * Handles the authentication request frame and sends the authentication response and association | ||
| 296 | * response frames. Once an Authentication frame with SEQ1 is received by the server, it responds | ||
| 297 | * with an Authentication frame containing SEQ2, and immediately sends an Association response frame | ||
| 298 | * containing the details of the access point and the assigned association id for the new client. | ||
| 299 | */ | ||
| 300 | void HandleAuthenticationFrame(const Network::WifiPacket& packet) { | ||
| 301 | // Only the SEQ1 auth frame is handled here, the SEQ2 frame doesn't need any special behavior | ||
| 302 | if (GetAuthenticationSeqNumber(packet.data) == AuthenticationSeq::SEQ1) { | ||
| 303 | using Network::WifiPacket; | ||
| 304 | WifiPacket auth_request; | ||
| 305 | { | ||
| 306 | std::lock_guard<std::mutex> lock(connection_status_mutex); | ||
| 307 | if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) { | ||
| 308 | LOG_ERROR(Service_NWM, | ||
| 309 | "Connection sequence aborted, because connection status is %u", | ||
| 310 | connection_status.status); | ||
| 311 | return; | ||
| 312 | } | ||
| 313 | |||
| 314 | // Respond with an authentication response frame with SEQ2 | ||
| 315 | auth_request.channel = network_channel; | ||
| 316 | auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ2); | ||
| 317 | auth_request.destination_address = packet.transmitter_address; | ||
| 318 | auth_request.type = WifiPacket::PacketType::Authentication; | ||
| 319 | } | ||
| 320 | SendPacket(auth_request); | ||
| 321 | |||
| 322 | SendAssociationResponseFrame(packet.transmitter_address); | ||
| 323 | } | ||
| 324 | } | ||
| 325 | |||
| 326 | static void HandleDataFrame(const Network::WifiPacket& packet) { | ||
| 327 | switch (GetFrameEtherType(packet.data)) { | ||
| 328 | case EtherType::EAPoL: | ||
| 329 | HandleEAPoLPacket(packet); | ||
| 330 | break; | ||
| 331 | case EtherType::SecureData: | ||
| 332 | // TODO(B3N30): Handle SecureData packets | ||
| 333 | break; | ||
| 334 | } | ||
| 335 | } | ||
| 336 | |||
| 337 | /// Callback to parse and handle a received wifi packet. | ||
| 338 | void OnWifiPacketReceived(const Network::WifiPacket& packet) { | ||
| 339 | switch (packet.type) { | ||
| 340 | case Network::WifiPacket::PacketType::Beacon: | ||
| 341 | HandleBeaconFrame(packet); | ||
| 342 | break; | ||
| 343 | case Network::WifiPacket::PacketType::Authentication: | ||
| 344 | HandleAuthenticationFrame(packet); | ||
| 345 | break; | ||
| 346 | case Network::WifiPacket::PacketType::AssociationResponse: | ||
| 347 | HandleAssociationResponseFrame(packet); | ||
| 348 | break; | ||
| 349 | case Network::WifiPacket::PacketType::Data: | ||
| 350 | HandleDataFrame(packet); | ||
| 351 | break; | ||
| 352 | } | ||
| 353 | } | ||
| 354 | |||
| 54 | /** | 355 | /** |
| 55 | * NWM_UDS::Shutdown service function | 356 | * NWM_UDS::Shutdown service function |
| 56 | * Inputs: | 357 | * Inputs: |
| @@ -111,11 +412,10 @@ static void RecvBeaconBroadcastData(Interface* self) { | |||
| 111 | u32 total_size = sizeof(BeaconDataReplyHeader); | 412 | u32 total_size = sizeof(BeaconDataReplyHeader); |
| 112 | 413 | ||
| 113 | // Retrieve all beacon frames that were received from the desired mac address. | 414 | // Retrieve all beacon frames that were received from the desired mac address. |
| 114 | std::deque<WifiPacket> beacons = | 415 | auto beacons = GetReceivedBeacons(mac_address); |
| 115 | GetReceivedPackets(WifiPacket::PacketType::Beacon, mac_address); | ||
| 116 | 416 | ||
| 117 | BeaconDataReplyHeader data_reply_header{}; | 417 | BeaconDataReplyHeader data_reply_header{}; |
| 118 | data_reply_header.total_entries = beacons.size(); | 418 | data_reply_header.total_entries = static_cast<u32>(beacons.size()); |
| 119 | data_reply_header.max_output_size = out_buffer_size; | 419 | data_reply_header.max_output_size = out_buffer_size; |
| 120 | 420 | ||
| 121 | Memory::WriteBlock(current_buffer_pos, &data_reply_header, sizeof(BeaconDataReplyHeader)); | 421 | Memory::WriteBlock(current_buffer_pos, &data_reply_header, sizeof(BeaconDataReplyHeader)); |
| @@ -125,8 +425,8 @@ static void RecvBeaconBroadcastData(Interface* self) { | |||
| 125 | for (const auto& beacon : beacons) { | 425 | for (const auto& beacon : beacons) { |
| 126 | BeaconEntryHeader entry{}; | 426 | BeaconEntryHeader entry{}; |
| 127 | // TODO(Subv): Figure out what this size is used for. | 427 | // TODO(Subv): Figure out what this size is used for. |
| 128 | entry.unk_size = sizeof(BeaconEntryHeader) + beacon.data.size(); | 428 | entry.unk_size = static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size()); |
| 129 | entry.total_size = sizeof(BeaconEntryHeader) + beacon.data.size(); | 429 | entry.total_size = static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size()); |
| 130 | entry.wifi_channel = beacon.channel; | 430 | entry.wifi_channel = beacon.channel; |
| 131 | entry.header_size = sizeof(BeaconEntryHeader); | 431 | entry.header_size = sizeof(BeaconEntryHeader); |
| 132 | entry.mac_address = beacon.transmitter_address; | 432 | entry.mac_address = beacon.transmitter_address; |
| @@ -137,9 +437,9 @@ static void RecvBeaconBroadcastData(Interface* self) { | |||
| 137 | current_buffer_pos += sizeof(BeaconEntryHeader); | 437 | current_buffer_pos += sizeof(BeaconEntryHeader); |
| 138 | 438 | ||
| 139 | Memory::WriteBlock(current_buffer_pos, beacon.data.data(), beacon.data.size()); | 439 | Memory::WriteBlock(current_buffer_pos, beacon.data.data(), beacon.data.size()); |
| 140 | current_buffer_pos += beacon.data.size(); | 440 | current_buffer_pos += static_cast<VAddr>(beacon.data.size()); |
| 141 | 441 | ||
| 142 | total_size += sizeof(BeaconEntryHeader) + beacon.data.size(); | 442 | total_size += static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size()); |
| 143 | } | 443 | } |
| 144 | 444 | ||
| 145 | // Update the total size in the structure and write it to the buffer again. | 445 | // Update the total size in the structure and write it to the buffer again. |
| @@ -174,7 +474,7 @@ static void InitializeWithVersion(Interface* self) { | |||
| 174 | u32 sharedmem_size = rp.Pop<u32>(); | 474 | u32 sharedmem_size = rp.Pop<u32>(); |
| 175 | 475 | ||
| 176 | // Update the node information with the data the game gave us. | 476 | // Update the node information with the data the game gave us. |
| 177 | rp.PopRaw(node_info[0]); | 477 | rp.PopRaw(current_node); |
| 178 | 478 | ||
| 179 | u16 version = rp.Pop<u16>(); | 479 | u16 version = rp.Pop<u16>(); |
| 180 | 480 | ||
| @@ -184,15 +484,22 @@ static void InitializeWithVersion(Interface* self) { | |||
| 184 | 484 | ||
| 185 | ASSERT_MSG(recv_buffer_memory->size == sharedmem_size, "Invalid shared memory size."); | 485 | ASSERT_MSG(recv_buffer_memory->size == sharedmem_size, "Invalid shared memory size."); |
| 186 | 486 | ||
| 187 | // Reset the connection status, it contains all zeros after initialization, | 487 | { |
| 188 | // except for the actual status value. | 488 | std::lock_guard<std::mutex> lock(connection_status_mutex); |
| 189 | connection_status = {}; | 489 | |
| 190 | connection_status.status = static_cast<u32>(NetworkStatus::NotConnected); | 490 | // Reset the connection status, it contains all zeros after initialization, |
| 491 | // except for the actual status value. | ||
| 492 | connection_status = {}; | ||
| 493 | connection_status.status = static_cast<u32>(NetworkStatus::NotConnected); | ||
| 494 | } | ||
| 191 | 495 | ||
| 192 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); | 496 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); |
| 193 | rb.Push(RESULT_SUCCESS); | 497 | rb.Push(RESULT_SUCCESS); |
| 194 | rb.PushCopyHandles(Kernel::g_handle_table.Create(connection_status_event).Unwrap()); | 498 | rb.PushCopyHandles(Kernel::g_handle_table.Create(connection_status_event).Unwrap()); |
| 195 | 499 | ||
| 500 | // TODO(Subv): Connect the OnWifiPacketReceived function to the wifi packet received callback of | ||
| 501 | // the room we're currently in. | ||
| 502 | |||
| 196 | LOG_DEBUG(Service_NWM, "called sharedmem_size=0x%08X, version=0x%08X, sharedmem_handle=0x%08X", | 503 | LOG_DEBUG(Service_NWM, "called sharedmem_size=0x%08X, version=0x%08X, sharedmem_handle=0x%08X", |
| 197 | sharedmem_size, version, sharedmem_handle); | 504 | sharedmem_size, version, sharedmem_handle); |
| 198 | } | 505 | } |
| @@ -214,12 +521,16 @@ static void GetConnectionStatus(Interface* self) { | |||
| 214 | IPC::RequestBuilder rb = rp.MakeBuilder(13, 0); | 521 | IPC::RequestBuilder rb = rp.MakeBuilder(13, 0); |
| 215 | 522 | ||
| 216 | rb.Push(RESULT_SUCCESS); | 523 | rb.Push(RESULT_SUCCESS); |
| 217 | rb.PushRaw(connection_status); | 524 | { |
| 218 | 525 | std::lock_guard<std::mutex> lock(connection_status_mutex); | |
| 219 | // Reset the bitmask of changed nodes after each call to this | 526 | rb.PushRaw(connection_status); |
| 220 | // function to prevent falsely informing games of outstanding | 527 | |
| 221 | // changes in subsequent calls. | 528 | // Reset the bitmask of changed nodes after each call to this |
| 222 | connection_status.changed_nodes = 0; | 529 | // function to prevent falsely informing games of outstanding |
| 530 | // changes in subsequent calls. | ||
| 531 | // TODO(Subv): Find exactly where the NWM module resets this value. | ||
| 532 | connection_status.changed_nodes = 0; | ||
| 533 | } | ||
| 223 | 534 | ||
| 224 | LOG_DEBUG(Service_NWM, "called"); | 535 | LOG_DEBUG(Service_NWM, "called"); |
| 225 | } | 536 | } |
| @@ -300,31 +611,36 @@ static void BeginHostingNetwork(Interface* self) { | |||
| 300 | // The real UDS module throws a fatal error if this assert fails. | 611 | // The real UDS module throws a fatal error if this assert fails. |
| 301 | ASSERT_MSG(network_info.max_nodes > 1, "Trying to host a network of only one member."); | 612 | ASSERT_MSG(network_info.max_nodes > 1, "Trying to host a network of only one member."); |
| 302 | 613 | ||
| 303 | connection_status.status = static_cast<u32>(NetworkStatus::ConnectedAsHost); | 614 | { |
| 304 | 615 | std::lock_guard<std::mutex> lock(connection_status_mutex); | |
| 305 | // Ensure the application data size is less than the maximum value. | 616 | connection_status.status = static_cast<u32>(NetworkStatus::ConnectedAsHost); |
| 306 | ASSERT_MSG(network_info.application_data_size <= ApplicationDataSize, "Data size is too big."); | 617 | |
| 307 | 618 | // Ensure the application data size is less than the maximum value. | |
| 308 | // Set up basic information for this network. | 619 | ASSERT_MSG(network_info.application_data_size <= ApplicationDataSize, |
| 309 | network_info.oui_value = NintendoOUI; | 620 | "Data size is too big."); |
| 310 | network_info.oui_type = static_cast<u8>(NintendoTagId::NetworkInfo); | 621 | |
| 311 | 622 | // Set up basic information for this network. | |
| 312 | connection_status.max_nodes = network_info.max_nodes; | 623 | network_info.oui_value = NintendoOUI; |
| 313 | 624 | network_info.oui_type = static_cast<u8>(NintendoTagId::NetworkInfo); | |
| 314 | // Resize the nodes list to hold max_nodes. | 625 | |
| 315 | node_info.resize(network_info.max_nodes); | 626 | connection_status.max_nodes = network_info.max_nodes; |
| 316 | 627 | ||
| 317 | // There's currently only one node in the network (the host). | 628 | // Resize the nodes list to hold max_nodes. |
| 318 | connection_status.total_nodes = 1; | 629 | node_info.resize(network_info.max_nodes); |
| 319 | network_info.total_nodes = 1; | 630 | |
| 320 | // The host is always the first node | 631 | // There's currently only one node in the network (the host). |
| 321 | connection_status.network_node_id = 1; | 632 | connection_status.total_nodes = 1; |
| 322 | node_info[0].network_node_id = 1; | 633 | network_info.total_nodes = 1; |
| 323 | connection_status.nodes[0] = connection_status.network_node_id; | 634 | // The host is always the first node |
| 324 | // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken. | 635 | connection_status.network_node_id = 1; |
| 325 | connection_status.node_bitmask |= 1; | 636 | current_node.network_node_id = 1; |
| 326 | // Notify the application that the first node was set. | 637 | connection_status.nodes[0] = connection_status.network_node_id; |
| 327 | connection_status.changed_nodes |= 1; | 638 | // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken. |
| 639 | connection_status.node_bitmask |= 1; | ||
| 640 | // Notify the application that the first node was set. | ||
| 641 | connection_status.changed_nodes |= 1; | ||
| 642 | node_info[0] = current_node; | ||
| 643 | } | ||
| 328 | 644 | ||
| 329 | // If the game has a preferred channel, use that instead. | 645 | // If the game has a preferred channel, use that instead. |
| 330 | if (network_info.channel != 0) | 646 | if (network_info.channel != 0) |
| @@ -361,9 +677,13 @@ static void DestroyNetwork(Interface* self) { | |||
| 361 | // Unschedule the beacon broadcast event. | 677 | // Unschedule the beacon broadcast event. |
| 362 | CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); | 678 | CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); |
| 363 | 679 | ||
| 364 | // TODO(Subv): Check if connection_status is indeed reset after this call. | 680 | { |
| 365 | connection_status = {}; | 681 | std::lock_guard<std::mutex> lock(connection_status_mutex); |
| 366 | connection_status.status = static_cast<u8>(NetworkStatus::NotConnected); | 682 | |
| 683 | // TODO(Subv): Check if connection_status is indeed reset after this call. | ||
| 684 | connection_status = {}; | ||
| 685 | connection_status.status = static_cast<u8>(NetworkStatus::NotConnected); | ||
| 686 | } | ||
| 367 | connection_status_event->Signal(); | 687 | connection_status_event->Signal(); |
| 368 | 688 | ||
| 369 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | 689 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |
| @@ -406,17 +726,24 @@ static void SendTo(Interface* self) { | |||
| 406 | 726 | ||
| 407 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | 727 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |
| 408 | 728 | ||
| 409 | if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsClient) && | 729 | u16 network_node_id; |
| 410 | connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) { | ||
| 411 | rb.Push(ResultCode(ErrorDescription::NotAuthorized, ErrorModule::UDS, | ||
| 412 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 413 | return; | ||
| 414 | } | ||
| 415 | 730 | ||
| 416 | if (dest_node_id == connection_status.network_node_id) { | 731 | { |
| 417 | rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::UDS, | 732 | std::lock_guard<std::mutex> lock(connection_status_mutex); |
| 418 | ErrorSummary::WrongArgument, ErrorLevel::Status)); | 733 | if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsClient) && |
| 419 | return; | 734 | connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) { |
| 735 | rb.Push(ResultCode(ErrorDescription::NotAuthorized, ErrorModule::UDS, | ||
| 736 | ErrorSummary::InvalidState, ErrorLevel::Status)); | ||
| 737 | return; | ||
| 738 | } | ||
| 739 | |||
| 740 | if (dest_node_id == connection_status.network_node_id) { | ||
| 741 | rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::UDS, | ||
| 742 | ErrorSummary::WrongArgument, ErrorLevel::Status)); | ||
| 743 | return; | ||
| 744 | } | ||
| 745 | |||
| 746 | network_node_id = connection_status.network_node_id; | ||
| 420 | } | 747 | } |
| 421 | 748 | ||
| 422 | // TODO(Subv): Do something with the flags. | 749 | // TODO(Subv): Do something with the flags. |
| @@ -433,8 +760,8 @@ static void SendTo(Interface* self) { | |||
| 433 | 760 | ||
| 434 | // TODO(Subv): Increment the sequence number after each sent packet. | 761 | // TODO(Subv): Increment the sequence number after each sent packet. |
| 435 | u16 sequence_number = 0; | 762 | u16 sequence_number = 0; |
| 436 | std::vector<u8> data_payload = GenerateDataPayload( | 763 | std::vector<u8> data_payload = |
| 437 | data, data_channel, dest_node_id, connection_status.network_node_id, sequence_number); | 764 | GenerateDataPayload(data, data_channel, dest_node_id, network_node_id, sequence_number); |
| 438 | 765 | ||
| 439 | // TODO(Subv): Retrieve the MAC address of the dest_node_id and our own to encrypt | 766 | // TODO(Subv): Retrieve the MAC address of the dest_node_id and our own to encrypt |
| 440 | // and encapsulate the payload. | 767 | // and encapsulate the payload. |
| @@ -461,6 +788,7 @@ static void GetChannel(Interface* self) { | |||
| 461 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); | 788 | IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); |
| 462 | IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | 789 | IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |
| 463 | 790 | ||
| 791 | std::lock_guard<std::mutex> lock(connection_status_mutex); | ||
| 464 | bool is_connected = connection_status.status != static_cast<u32>(NetworkStatus::NotConnected); | 792 | bool is_connected = connection_status.status != static_cast<u32>(NetworkStatus::NotConnected); |
| 465 | 793 | ||
| 466 | u8 channel = is_connected ? network_channel : 0; | 794 | u8 channel = is_connected ? network_channel : 0; |
| @@ -610,37 +938,29 @@ static void BeaconBroadcastCallback(u64 userdata, int cycles_late) { | |||
| 610 | if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) | 938 | if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) |
| 611 | return; | 939 | return; |
| 612 | 940 | ||
| 613 | // TODO(Subv): Actually send the beacon. | ||
| 614 | std::vector<u8> frame = GenerateBeaconFrame(network_info, node_info); | 941 | std::vector<u8> frame = GenerateBeaconFrame(network_info, node_info); |
| 615 | 942 | ||
| 943 | using Network::WifiPacket; | ||
| 944 | WifiPacket packet; | ||
| 945 | packet.type = WifiPacket::PacketType::Beacon; | ||
| 946 | packet.data = std::move(frame); | ||
| 947 | packet.destination_address = Network::BroadcastMac; | ||
| 948 | packet.channel = network_channel; | ||
| 949 | |||
| 950 | SendPacket(packet); | ||
| 951 | |||
| 616 | // Start broadcasting the network, send a beacon frame every 102.4ms. | 952 | // Start broadcasting the network, send a beacon frame every 102.4ms. |
| 617 | CoreTiming::ScheduleEvent(msToCycles(DefaultBeaconInterval * MillisecondsPerTU) - cycles_late, | 953 | CoreTiming::ScheduleEvent(msToCycles(DefaultBeaconInterval * MillisecondsPerTU) - cycles_late, |
| 618 | beacon_broadcast_event, 0); | 954 | beacon_broadcast_event, 0); |
| 619 | } | 955 | } |
| 620 | 956 | ||
| 621 | /* | 957 | /* |
| 622 | * Returns an available index in the nodes array for the | ||
| 623 | * currently-hosted UDS network. | ||
| 624 | */ | ||
| 625 | static u32 GetNextAvailableNodeId() { | ||
| 626 | ASSERT_MSG(connection_status.status == static_cast<u32>(NetworkStatus::ConnectedAsHost), | ||
| 627 | "Can not accept clients if we're not hosting a network"); | ||
| 628 | |||
| 629 | for (unsigned index = 0; index < connection_status.max_nodes; ++index) { | ||
| 630 | if ((connection_status.node_bitmask & (1 << index)) == 0) | ||
| 631 | return index; | ||
| 632 | } | ||
| 633 | |||
| 634 | // Any connection attempts to an already full network should have been refused. | ||
| 635 | ASSERT_MSG(false, "No available connection slots in the network"); | ||
| 636 | } | ||
| 637 | |||
| 638 | /* | ||
| 639 | * Called when a client connects to an UDS network we're hosting, | 958 | * Called when a client connects to an UDS network we're hosting, |
| 640 | * updates the connection status and signals the update event. | 959 | * updates the connection status and signals the update event. |
| 641 | * @param network_node_id Network Node Id of the connecting client. | 960 | * @param network_node_id Network Node Id of the connecting client. |
| 642 | */ | 961 | */ |
| 643 | void OnClientConnected(u16 network_node_id) { | 962 | void OnClientConnected(u16 network_node_id) { |
| 963 | std::lock_guard<std::mutex> lock(connection_status_mutex); | ||
| 644 | ASSERT_MSG(connection_status.status == static_cast<u32>(NetworkStatus::ConnectedAsHost), | 964 | ASSERT_MSG(connection_status.status == static_cast<u32>(NetworkStatus::ConnectedAsHost), |
| 645 | "Can not accept clients if we're not hosting a network"); | 965 | "Can not accept clients if we're not hosting a network"); |
| 646 | ASSERT_MSG(connection_status.total_nodes < connection_status.max_nodes, | 966 | ASSERT_MSG(connection_status.total_nodes < connection_status.max_nodes, |
| @@ -655,7 +975,7 @@ void OnClientConnected(u16 network_node_id) { | |||
| 655 | } | 975 | } |
| 656 | 976 | ||
| 657 | const Interface::FunctionInfo FunctionTable[] = { | 977 | const Interface::FunctionInfo FunctionTable[] = { |
| 658 | {0x00010442, nullptr, "Initialize (deprecated)"}, | 978 | {0x000102C2, nullptr, "Initialize (deprecated)"}, |
| 659 | {0x00020000, nullptr, "Scrap"}, | 979 | {0x00020000, nullptr, "Scrap"}, |
| 660 | {0x00030000, Shutdown, "Shutdown"}, | 980 | {0x00030000, Shutdown, "Shutdown"}, |
| 661 | {0x00040402, nullptr, "CreateNetwork (deprecated)"}, | 981 | {0x00040402, nullptr, "CreateNetwork (deprecated)"}, |
| @@ -702,8 +1022,11 @@ NWM_UDS::~NWM_UDS() { | |||
| 702 | connection_status_event = nullptr; | 1022 | connection_status_event = nullptr; |
| 703 | recv_buffer_memory = nullptr; | 1023 | recv_buffer_memory = nullptr; |
| 704 | 1024 | ||
| 705 | connection_status = {}; | 1025 | { |
| 706 | connection_status.status = static_cast<u32>(NetworkStatus::NotConnected); | 1026 | std::lock_guard<std::mutex> lock(connection_status_mutex); |
| 1027 | connection_status = {}; | ||
| 1028 | connection_status.status = static_cast<u32>(NetworkStatus::NotConnected); | ||
| 1029 | } | ||
| 707 | 1030 | ||
| 708 | CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); | 1031 | CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); |
| 709 | } | 1032 | } |
diff --git a/src/core/hle/service/nwm/nwm_uds.h b/src/core/hle/service/nwm/nwm_uds.h index 141f49f9c..f1caaf974 100644 --- a/src/core/hle/service/nwm/nwm_uds.h +++ b/src/core/hle/service/nwm/nwm_uds.h | |||
| @@ -42,6 +42,7 @@ using NodeList = std::vector<NodeInfo>; | |||
| 42 | enum class NetworkStatus { | 42 | enum class NetworkStatus { |
| 43 | NotConnected = 3, | 43 | NotConnected = 3, |
| 44 | ConnectedAsHost = 6, | 44 | ConnectedAsHost = 6, |
| 45 | Connecting = 7, | ||
| 45 | ConnectedAsClient = 9, | 46 | ConnectedAsClient = 9, |
| 46 | ConnectedAsSpectator = 10, | 47 | ConnectedAsSpectator = 10, |
| 47 | }; | 48 | }; |
| @@ -85,6 +86,17 @@ static_assert(offsetof(NetworkInfo, oui_value) == 0xC, "oui_value is at the wron | |||
| 85 | static_assert(offsetof(NetworkInfo, wlan_comm_id) == 0x10, "wlancommid is at the wrong offset."); | 86 | static_assert(offsetof(NetworkInfo, wlan_comm_id) == 0x10, "wlancommid is at the wrong offset."); |
| 86 | static_assert(sizeof(NetworkInfo) == 0x108, "NetworkInfo has incorrect size."); | 87 | static_assert(sizeof(NetworkInfo) == 0x108, "NetworkInfo has incorrect size."); |
| 87 | 88 | ||
| 89 | /// Additional block tag ids in the Beacon and Association Response frames | ||
| 90 | enum class TagId : u8 { | ||
| 91 | SSID = 0, | ||
| 92 | SupportedRates = 1, | ||
| 93 | DSParameterSet = 2, | ||
| 94 | TrafficIndicationMap = 5, | ||
| 95 | CountryInformation = 7, | ||
| 96 | ERPInformation = 42, | ||
| 97 | VendorSpecific = 221 | ||
| 98 | }; | ||
| 99 | |||
| 88 | class NWM_UDS final : public Interface { | 100 | class NWM_UDS final : public Interface { |
| 89 | public: | 101 | public: |
| 90 | NWM_UDS(); | 102 | NWM_UDS(); |
diff --git a/src/core/hle/service/nwm/uds_beacon.cpp b/src/core/hle/service/nwm/uds_beacon.cpp index 6332b404c..73a80d940 100644 --- a/src/core/hle/service/nwm/uds_beacon.cpp +++ b/src/core/hle/service/nwm/uds_beacon.cpp | |||
| @@ -243,7 +243,7 @@ std::vector<u8> GenerateNintendoFirstEncryptedDataTag(const NetworkInfo& network | |||
| 243 | 243 | ||
| 244 | EncryptedDataTag tag{}; | 244 | EncryptedDataTag tag{}; |
| 245 | tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific); | 245 | tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific); |
| 246 | tag.header.length = sizeof(tag) - sizeof(TagHeader) + payload_size; | 246 | tag.header.length = static_cast<u8>(sizeof(tag) - sizeof(TagHeader) + payload_size); |
| 247 | tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData0); | 247 | tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData0); |
| 248 | tag.oui = NintendoOUI; | 248 | tag.oui = NintendoOUI; |
| 249 | 249 | ||
| @@ -279,7 +279,7 @@ std::vector<u8> GenerateNintendoSecondEncryptedDataTag(const NetworkInfo& networ | |||
| 279 | 279 | ||
| 280 | EncryptedDataTag tag{}; | 280 | EncryptedDataTag tag{}; |
| 281 | tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific); | 281 | tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific); |
| 282 | tag.header.length = tag_length; | 282 | tag.header.length = static_cast<u8>(tag_length); |
| 283 | tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData1); | 283 | tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData1); |
| 284 | tag.oui = NintendoOUI; | 284 | tag.oui = NintendoOUI; |
| 285 | 285 | ||
| @@ -325,8 +325,5 @@ std::vector<u8> GenerateBeaconFrame(const NetworkInfo& network_info, const NodeL | |||
| 325 | return buffer; | 325 | return buffer; |
| 326 | } | 326 | } |
| 327 | 327 | ||
| 328 | std::deque<WifiPacket> GetReceivedPackets(WifiPacket::PacketType type, const MacAddress& sender) { | ||
| 329 | return {}; | ||
| 330 | } | ||
| 331 | } // namespace NWM | 328 | } // namespace NWM |
| 332 | } // namespace Service | 329 | } // namespace Service |
diff --git a/src/core/hle/service/nwm/uds_beacon.h b/src/core/hle/service/nwm/uds_beacon.h index caacf4c6f..50cc76da2 100644 --- a/src/core/hle/service/nwm/uds_beacon.h +++ b/src/core/hle/service/nwm/uds_beacon.h | |||
| @@ -17,17 +17,6 @@ namespace NWM { | |||
| 17 | using MacAddress = std::array<u8, 6>; | 17 | using MacAddress = std::array<u8, 6>; |
| 18 | constexpr std::array<u8, 3> NintendoOUI = {0x00, 0x1F, 0x32}; | 18 | constexpr std::array<u8, 3> NintendoOUI = {0x00, 0x1F, 0x32}; |
| 19 | 19 | ||
| 20 | /// Additional block tag ids in the Beacon frames | ||
| 21 | enum class TagId : u8 { | ||
| 22 | SSID = 0, | ||
| 23 | SupportedRates = 1, | ||
| 24 | DSParameterSet = 2, | ||
| 25 | TrafficIndicationMap = 5, | ||
| 26 | CountryInformation = 7, | ||
| 27 | ERPInformation = 42, | ||
| 28 | VendorSpecific = 221 | ||
| 29 | }; | ||
| 30 | |||
| 31 | /** | 20 | /** |
| 32 | * Internal vendor-specific tag ids as stored inside | 21 | * Internal vendor-specific tag ids as stored inside |
| 33 | * VendorSpecific blocks in the Beacon frames. | 22 | * VendorSpecific blocks in the Beacon frames. |
| @@ -135,20 +124,6 @@ struct BeaconData { | |||
| 135 | 124 | ||
| 136 | static_assert(sizeof(BeaconData) == 0x12, "BeaconData has incorrect size."); | 125 | static_assert(sizeof(BeaconData) == 0x12, "BeaconData has incorrect size."); |
| 137 | 126 | ||
| 138 | /// Information about a received WiFi packet. | ||
| 139 | /// Acts as our own 802.11 header. | ||
| 140 | struct WifiPacket { | ||
| 141 | enum class PacketType { Beacon, Data }; | ||
| 142 | |||
| 143 | PacketType type; ///< The type of 802.11 frame, Beacon / Data. | ||
| 144 | |||
| 145 | /// Raw 802.11 frame data, starting at the management frame header for management frames. | ||
| 146 | std::vector<u8> data; | ||
| 147 | MacAddress transmitter_address; ///< Mac address of the transmitter. | ||
| 148 | MacAddress destination_address; ///< Mac address of the receiver. | ||
| 149 | u8 channel; ///< WiFi channel where this frame was transmitted. | ||
| 150 | }; | ||
| 151 | |||
| 152 | /** | 127 | /** |
| 153 | * Decrypts the beacon data buffer for the network described by `network_info`. | 128 | * Decrypts the beacon data buffer for the network described by `network_info`. |
| 154 | */ | 129 | */ |
| @@ -161,10 +136,5 @@ void DecryptBeaconData(const NetworkInfo& network_info, std::vector<u8>& buffer) | |||
| 161 | */ | 136 | */ |
| 162 | std::vector<u8> GenerateBeaconFrame(const NetworkInfo& network_info, const NodeList& nodes); | 137 | std::vector<u8> GenerateBeaconFrame(const NetworkInfo& network_info, const NodeList& nodes); |
| 163 | 138 | ||
| 164 | /** | ||
| 165 | * Returns a list of received 802.11 frames from the specified sender | ||
| 166 | * matching the type since the last call. | ||
| 167 | */ | ||
| 168 | std::deque<WifiPacket> GetReceivedPackets(WifiPacket::PacketType type, const MacAddress& sender); | ||
| 169 | } // namespace NWM | 139 | } // namespace NWM |
| 170 | } // namespace Service | 140 | } // namespace Service |
diff --git a/src/core/hle/service/nwm/uds_connection.cpp b/src/core/hle/service/nwm/uds_connection.cpp new file mode 100644 index 000000000..c74f51253 --- /dev/null +++ b/src/core/hle/service/nwm/uds_connection.cpp | |||
| @@ -0,0 +1,88 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "core/hle/service/nwm/nwm_uds.h" | ||
| 6 | #include "core/hle/service/nwm/uds_connection.h" | ||
| 7 | #include "fmt/format.h" | ||
| 8 | |||
| 9 | namespace Service { | ||
| 10 | namespace NWM { | ||
| 11 | |||
| 12 | // Note: These values were taken from a packet capture of an o3DS XL | ||
| 13 | // broadcasting a Super Smash Bros. 4 lobby. | ||
| 14 | constexpr u16 DefaultExtraCapabilities = 0x0431; | ||
| 15 | |||
| 16 | std::vector<u8> GenerateAuthenticationFrame(AuthenticationSeq seq) { | ||
| 17 | AuthenticationFrame frame{}; | ||
| 18 | frame.auth_seq = static_cast<u16>(seq); | ||
| 19 | |||
| 20 | std::vector<u8> data(sizeof(frame)); | ||
| 21 | std::memcpy(data.data(), &frame, sizeof(frame)); | ||
| 22 | |||
| 23 | return data; | ||
| 24 | } | ||
| 25 | |||
| 26 | AuthenticationSeq GetAuthenticationSeqNumber(const std::vector<u8>& body) { | ||
| 27 | AuthenticationFrame frame; | ||
| 28 | std::memcpy(&frame, body.data(), sizeof(frame)); | ||
| 29 | |||
| 30 | return static_cast<AuthenticationSeq>(frame.auth_seq); | ||
| 31 | } | ||
| 32 | |||
| 33 | /** | ||
| 34 | * Generates an SSID tag of an 802.11 Beacon frame with an 8-byte character representation of the | ||
| 35 | * specified network id as the SSID value. | ||
| 36 | * @param network_id The network id to use. | ||
| 37 | * @returns A buffer with the SSID tag. | ||
| 38 | */ | ||
| 39 | static std::vector<u8> GenerateSSIDTag(u32 network_id) { | ||
| 40 | constexpr u8 SSIDSize = 8; | ||
| 41 | |||
| 42 | struct { | ||
| 43 | u8 id = static_cast<u8>(TagId::SSID); | ||
| 44 | u8 size = SSIDSize; | ||
| 45 | } tag_header; | ||
| 46 | |||
| 47 | std::vector<u8> buffer(sizeof(tag_header) + SSIDSize); | ||
| 48 | |||
| 49 | std::memcpy(buffer.data(), &tag_header, sizeof(tag_header)); | ||
| 50 | |||
| 51 | std::string network_name = fmt::format("{0:08X}", network_id); | ||
| 52 | |||
| 53 | std::memcpy(buffer.data() + sizeof(tag_header), network_name.c_str(), SSIDSize); | ||
| 54 | |||
| 55 | return buffer; | ||
| 56 | } | ||
| 57 | |||
| 58 | std::vector<u8> GenerateAssocResponseFrame(AssocStatus status, u16 association_id, u32 network_id) { | ||
| 59 | AssociationResponseFrame frame{}; | ||
| 60 | frame.capabilities = DefaultExtraCapabilities; | ||
| 61 | frame.status_code = static_cast<u16>(status); | ||
| 62 | // The association id is ORed with this magic value (0xC000) | ||
| 63 | constexpr u16 AssociationIdMagic = 0xC000; | ||
| 64 | frame.assoc_id = association_id | AssociationIdMagic; | ||
| 65 | |||
| 66 | std::vector<u8> data(sizeof(frame)); | ||
| 67 | std::memcpy(data.data(), &frame, sizeof(frame)); | ||
| 68 | |||
| 69 | auto ssid_tag = GenerateSSIDTag(network_id); | ||
| 70 | data.insert(data.end(), ssid_tag.begin(), ssid_tag.end()); | ||
| 71 | |||
| 72 | // TODO(Subv): Add the SupportedRates tag. | ||
| 73 | // TODO(Subv): Add the DSParameterSet tag. | ||
| 74 | // TODO(Subv): Add the ERPInformation tag. | ||
| 75 | return data; | ||
| 76 | } | ||
| 77 | |||
| 78 | std::tuple<AssocStatus, u16> GetAssociationResult(const std::vector<u8>& body) { | ||
| 79 | AssociationResponseFrame frame; | ||
| 80 | memcpy(&frame, body.data(), sizeof(frame)); | ||
| 81 | |||
| 82 | constexpr u16 AssociationIdMask = 0x3FFF; | ||
| 83 | return std::make_tuple(static_cast<AssocStatus>(frame.status_code), | ||
| 84 | frame.assoc_id & AssociationIdMask); | ||
| 85 | } | ||
| 86 | |||
| 87 | } // namespace NWM | ||
| 88 | } // namespace Service | ||
diff --git a/src/core/hle/service/nwm/uds_connection.h b/src/core/hle/service/nwm/uds_connection.h new file mode 100644 index 000000000..a664f8471 --- /dev/null +++ b/src/core/hle/service/nwm/uds_connection.h | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <tuple> | ||
| 8 | #include <vector> | ||
| 9 | #include "common/common_types.h" | ||
| 10 | #include "common/swap.h" | ||
| 11 | #include "core/hle/service/service.h" | ||
| 12 | |||
| 13 | namespace Service { | ||
| 14 | namespace NWM { | ||
| 15 | |||
| 16 | /// Sequence number of the 802.11 authentication frames. | ||
| 17 | enum class AuthenticationSeq : u16 { SEQ1 = 1, SEQ2 = 2 }; | ||
| 18 | |||
| 19 | enum class AuthAlgorithm : u16 { OpenSystem = 0 }; | ||
| 20 | |||
| 21 | enum class AuthStatus : u16 { Successful = 0 }; | ||
| 22 | |||
| 23 | enum class AssocStatus : u16 { Successful = 0 }; | ||
| 24 | |||
| 25 | struct AuthenticationFrame { | ||
| 26 | u16_le auth_algorithm = static_cast<u16>(AuthAlgorithm::OpenSystem); | ||
| 27 | u16_le auth_seq; | ||
| 28 | u16_le status_code = static_cast<u16>(AuthStatus::Successful); | ||
| 29 | }; | ||
| 30 | |||
| 31 | static_assert(sizeof(AuthenticationFrame) == 6, "AuthenticationFrame has wrong size"); | ||
| 32 | |||
| 33 | struct AssociationResponseFrame { | ||
| 34 | u16_le capabilities; | ||
| 35 | u16_le status_code; | ||
| 36 | u16_le assoc_id; | ||
| 37 | }; | ||
| 38 | |||
| 39 | static_assert(sizeof(AssociationResponseFrame) == 6, "AssociationResponseFrame has wrong size"); | ||
| 40 | |||
| 41 | /// Generates an 802.11 authentication frame, starting at the frame body. | ||
| 42 | std::vector<u8> GenerateAuthenticationFrame(AuthenticationSeq seq); | ||
| 43 | |||
| 44 | /// Returns the sequence number from the body of an Authentication frame. | ||
| 45 | AuthenticationSeq GetAuthenticationSeqNumber(const std::vector<u8>& body); | ||
| 46 | |||
| 47 | /// Generates an 802.11 association response frame with the specified status, association id and | ||
| 48 | /// network id, starting at the frame body. | ||
| 49 | std::vector<u8> GenerateAssocResponseFrame(AssocStatus status, u16 association_id, u32 network_id); | ||
| 50 | |||
| 51 | /// Returns a tuple of (association status, association id) from the body of an AssociationResponse | ||
| 52 | /// frame. | ||
| 53 | std::tuple<AssocStatus, u16> GetAssociationResult(const std::vector<u8>& body); | ||
| 54 | |||
| 55 | } // namespace NWM | ||
| 56 | } // namespace Service | ||
diff --git a/src/core/hle/service/nwm/uds_data.cpp b/src/core/hle/service/nwm/uds_data.cpp index 8c6742dba..4b389710f 100644 --- a/src/core/hle/service/nwm/uds_data.cpp +++ b/src/core/hle/service/nwm/uds_data.cpp | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <algorithm> | ||
| 5 | #include <cstring> | 6 | #include <cstring> |
| 6 | #include <cryptopp/aes.h> | 7 | #include <cryptopp/aes.h> |
| 7 | #include <cryptopp/ccm.h> | 8 | #include <cryptopp/ccm.h> |
| @@ -197,7 +198,7 @@ static std::vector<u8> DecryptDataFrame(const std::vector<u8>& encrypted_payload | |||
| 197 | df.ChannelMessageEnd(CryptoPP::DEFAULT_CHANNEL); | 198 | df.ChannelMessageEnd(CryptoPP::DEFAULT_CHANNEL); |
| 198 | df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL); | 199 | df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL); |
| 199 | 200 | ||
| 200 | int size = df.MaxRetrievable(); | 201 | size_t size = df.MaxRetrievable(); |
| 201 | 202 | ||
| 202 | std::vector<u8> pdata(size); | 203 | std::vector<u8> pdata(size); |
| 203 | df.Get(pdata.data(), size); | 204 | df.Get(pdata.data(), size); |
| @@ -251,7 +252,7 @@ static std::vector<u8> EncryptDataFrame(const std::vector<u8>& payload, | |||
| 251 | 252 | ||
| 252 | df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL); | 253 | df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL); |
| 253 | 254 | ||
| 254 | int size = df.MaxRetrievable(); | 255 | size_t size = df.MaxRetrievable(); |
| 255 | 256 | ||
| 256 | std::vector<u8> cipher(size); | 257 | std::vector<u8> cipher(size); |
| 257 | df.Get(cipher.data(), size); | 258 | df.Get(cipher.data(), size); |
| @@ -266,13 +267,107 @@ static std::vector<u8> EncryptDataFrame(const std::vector<u8>& payload, | |||
| 266 | std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node, | 267 | std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node, |
| 267 | u16 src_node, u16 sequence_number) { | 268 | u16 src_node, u16 sequence_number) { |
| 268 | std::vector<u8> buffer = GenerateLLCHeader(EtherType::SecureData); | 269 | std::vector<u8> buffer = GenerateLLCHeader(EtherType::SecureData); |
| 269 | std::vector<u8> securedata_header = | 270 | std::vector<u8> securedata_header = GenerateSecureDataHeader( |
| 270 | GenerateSecureDataHeader(data.size(), channel, dest_node, src_node, sequence_number); | 271 | static_cast<u16>(data.size()), channel, dest_node, src_node, sequence_number); |
| 271 | 272 | ||
| 272 | buffer.insert(buffer.end(), securedata_header.begin(), securedata_header.end()); | 273 | buffer.insert(buffer.end(), securedata_header.begin(), securedata_header.end()); |
| 273 | buffer.insert(buffer.end(), data.begin(), data.end()); | 274 | buffer.insert(buffer.end(), data.begin(), data.end()); |
| 274 | return buffer; | 275 | return buffer; |
| 275 | } | 276 | } |
| 276 | 277 | ||
| 278 | std::vector<u8> GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node_info) { | ||
| 279 | EAPoLStartPacket eapol_start{}; | ||
| 280 | eapol_start.association_id = association_id; | ||
| 281 | eapol_start.node.friend_code_seed = node_info.friend_code_seed; | ||
| 282 | |||
| 283 | std::copy(node_info.username.begin(), node_info.username.end(), | ||
| 284 | eapol_start.node.username.begin()); | ||
| 285 | |||
| 286 | // Note: The network_node_id and unknown bytes seem to be uninitialized in the NWM module. | ||
| 287 | // TODO(B3N30): The last 8 bytes seem to have a fixed value of 07 88 15 00 04 e9 13 00 in | ||
| 288 | // EAPoL-Start packets from different 3DSs to the same host during a Super Smash Bros. 4 game. | ||
| 289 | // Find out what that means. | ||
| 290 | |||
| 291 | std::vector<u8> eapol_buffer(sizeof(EAPoLStartPacket)); | ||
| 292 | std::memcpy(eapol_buffer.data(), &eapol_start, sizeof(eapol_start)); | ||
| 293 | |||
| 294 | std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL); | ||
| 295 | buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end()); | ||
| 296 | return buffer; | ||
| 297 | } | ||
| 298 | |||
| 299 | EtherType GetFrameEtherType(const std::vector<u8>& frame) { | ||
| 300 | LLCHeader header; | ||
| 301 | std::memcpy(&header, frame.data(), sizeof(header)); | ||
| 302 | |||
| 303 | u16 ethertype = header.protocol; | ||
| 304 | return static_cast<EtherType>(ethertype); | ||
| 305 | } | ||
| 306 | |||
| 307 | u16 GetEAPoLFrameType(const std::vector<u8>& frame) { | ||
| 308 | // Ignore the LLC header | ||
| 309 | u16_be eapol_type; | ||
| 310 | std::memcpy(&eapol_type, frame.data() + sizeof(LLCHeader), sizeof(eapol_type)); | ||
| 311 | return eapol_type; | ||
| 312 | } | ||
| 313 | |||
| 314 | NodeInfo DeserializeNodeInfoFromFrame(const std::vector<u8>& frame) { | ||
| 315 | EAPoLStartPacket eapol_start; | ||
| 316 | |||
| 317 | // Skip the LLC header | ||
| 318 | std::memcpy(&eapol_start, frame.data() + sizeof(LLCHeader), sizeof(eapol_start)); | ||
| 319 | |||
| 320 | NodeInfo node{}; | ||
| 321 | node.friend_code_seed = eapol_start.node.friend_code_seed; | ||
| 322 | |||
| 323 | std::copy(eapol_start.node.username.begin(), eapol_start.node.username.end(), | ||
| 324 | node.username.begin()); | ||
| 325 | |||
| 326 | return node; | ||
| 327 | } | ||
| 328 | |||
| 329 | NodeInfo DeserializeNodeInfo(const EAPoLNodeInfo& node) { | ||
| 330 | NodeInfo node_info{}; | ||
| 331 | node_info.friend_code_seed = node.friend_code_seed; | ||
| 332 | node_info.network_node_id = node.network_node_id; | ||
| 333 | |||
| 334 | std::copy(node.username.begin(), node.username.end(), node_info.username.begin()); | ||
| 335 | |||
| 336 | return node_info; | ||
| 337 | } | ||
| 338 | |||
| 339 | std::vector<u8> GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 network_node_id, | ||
| 340 | const NodeList& nodes, u8 max_nodes, u8 total_nodes) { | ||
| 341 | EAPoLLogoffPacket eapol_logoff{}; | ||
| 342 | eapol_logoff.assigned_node_id = network_node_id; | ||
| 343 | eapol_logoff.connected_nodes = total_nodes; | ||
| 344 | eapol_logoff.max_nodes = max_nodes; | ||
| 345 | |||
| 346 | for (size_t index = 0; index < total_nodes; ++index) { | ||
| 347 | const auto& node_info = nodes[index]; | ||
| 348 | auto& node = eapol_logoff.nodes[index]; | ||
| 349 | |||
| 350 | node.friend_code_seed = node_info.friend_code_seed; | ||
| 351 | node.network_node_id = node_info.network_node_id; | ||
| 352 | |||
| 353 | std::copy(node_info.username.begin(), node_info.username.end(), node.username.begin()); | ||
| 354 | } | ||
| 355 | |||
| 356 | std::vector<u8> eapol_buffer(sizeof(EAPoLLogoffPacket)); | ||
| 357 | std::memcpy(eapol_buffer.data(), &eapol_logoff, sizeof(eapol_logoff)); | ||
| 358 | |||
| 359 | std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL); | ||
| 360 | buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end()); | ||
| 361 | return buffer; | ||
| 362 | } | ||
| 363 | |||
| 364 | EAPoLLogoffPacket ParseEAPoLLogoffFrame(const std::vector<u8>& frame) { | ||
| 365 | EAPoLLogoffPacket eapol_logoff; | ||
| 366 | |||
| 367 | // Skip the LLC header | ||
| 368 | std::memcpy(&eapol_logoff, frame.data() + sizeof(LLCHeader), sizeof(eapol_logoff)); | ||
| 369 | return eapol_logoff; | ||
| 370 | } | ||
| 371 | |||
| 277 | } // namespace NWM | 372 | } // namespace NWM |
| 278 | } // namespace Service | 373 | } // namespace Service |
diff --git a/src/core/hle/service/nwm/uds_data.h b/src/core/hle/service/nwm/uds_data.h index a23520a41..76bccb1bf 100644 --- a/src/core/hle/service/nwm/uds_data.h +++ b/src/core/hle/service/nwm/uds_data.h | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include <vector> | 8 | #include <vector> |
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "common/swap.h" | 10 | #include "common/swap.h" |
| 11 | #include "core/hle/service/nwm/uds_beacon.h" | ||
| 11 | #include "core/hle/service/service.h" | 12 | #include "core/hle/service/service.h" |
| 12 | 13 | ||
| 13 | namespace Service { | 14 | namespace Service { |
| @@ -67,6 +68,49 @@ struct DataFrameCryptoCTR { | |||
| 67 | 68 | ||
| 68 | static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wrong size"); | 69 | static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wrong size"); |
| 69 | 70 | ||
| 71 | struct EAPoLNodeInfo { | ||
| 72 | u64_be friend_code_seed; | ||
| 73 | std::array<u16_be, 10> username; | ||
| 74 | INSERT_PADDING_BYTES(4); | ||
| 75 | u16_be network_node_id; | ||
| 76 | INSERT_PADDING_BYTES(6); | ||
| 77 | }; | ||
| 78 | |||
| 79 | static_assert(sizeof(EAPoLNodeInfo) == 0x28, "EAPoLNodeInfo has the wrong size"); | ||
| 80 | |||
| 81 | constexpr u16 EAPoLStartMagic = 0x201; | ||
| 82 | |||
| 83 | /* | ||
| 84 | * Nintendo EAPoLStartPacket, is used to initaliaze a connection between client and host | ||
| 85 | */ | ||
| 86 | struct EAPoLStartPacket { | ||
| 87 | u16_be magic = EAPoLStartMagic; | ||
| 88 | u16_be association_id; | ||
| 89 | // This value is hardcoded to 1 in the NWM module. | ||
| 90 | u16_be unknown = 1; | ||
| 91 | INSERT_PADDING_BYTES(2); | ||
| 92 | EAPoLNodeInfo node; | ||
| 93 | }; | ||
| 94 | |||
| 95 | static_assert(sizeof(EAPoLStartPacket) == 0x30, "EAPoLStartPacket has the wrong size"); | ||
| 96 | |||
| 97 | constexpr u16 EAPoLLogoffMagic = 0x202; | ||
| 98 | |||
| 99 | struct EAPoLLogoffPacket { | ||
| 100 | u16_be magic = EAPoLLogoffMagic; | ||
| 101 | INSERT_PADDING_BYTES(2); | ||
| 102 | u16_be assigned_node_id; | ||
| 103 | MacAddress client_mac_address; | ||
| 104 | INSERT_PADDING_BYTES(6); | ||
| 105 | u8 connected_nodes; | ||
| 106 | u8 max_nodes; | ||
| 107 | INSERT_PADDING_BYTES(4); | ||
| 108 | |||
| 109 | std::array<EAPoLNodeInfo, UDSMaxNodes> nodes; | ||
| 110 | }; | ||
| 111 | |||
| 112 | static_assert(sizeof(EAPoLLogoffPacket) == 0x298, "EAPoLLogoffPacket has the wrong size"); | ||
| 113 | |||
| 70 | /** | 114 | /** |
| 71 | * Generates an unencrypted 802.11 data payload. | 115 | * Generates an unencrypted 802.11 data payload. |
| 72 | * @returns The generated frame payload. | 116 | * @returns The generated frame payload. |
| @@ -74,5 +118,47 @@ static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wron | |||
| 74 | std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node, | 118 | std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node, |
| 75 | u16 src_node, u16 sequence_number); | 119 | u16 src_node, u16 sequence_number); |
| 76 | 120 | ||
| 121 | /* | ||
| 122 | * Generates an unencrypted 802.11 data frame body with the EAPoL-Start format for UDS | ||
| 123 | * communication. | ||
| 124 | * @returns The generated frame body. | ||
| 125 | */ | ||
| 126 | std::vector<u8> GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node_info); | ||
| 127 | |||
| 128 | /* | ||
| 129 | * Returns the EtherType of the specified 802.11 frame. | ||
| 130 | */ | ||
| 131 | EtherType GetFrameEtherType(const std::vector<u8>& frame); | ||
| 132 | |||
| 133 | /* | ||
| 134 | * Returns the EAPoL type (Start / Logoff) of the specified 802.11 frame. | ||
| 135 | * Note: The frame *must* be an EAPoL frame. | ||
| 136 | */ | ||
| 137 | u16 GetEAPoLFrameType(const std::vector<u8>& frame); | ||
| 138 | |||
| 139 | /* | ||
| 140 | * Returns a deserialized NodeInfo structure from the information inside an EAPoL-Start packet | ||
| 141 | * encapsulated in an 802.11 data frame. | ||
| 142 | */ | ||
| 143 | NodeInfo DeserializeNodeInfoFromFrame(const std::vector<u8>& frame); | ||
| 144 | |||
| 145 | /* | ||
| 146 | * Returns a NodeInfo constructed from the data in the specified EAPoLNodeInfo. | ||
| 147 | */ | ||
| 148 | NodeInfo DeserializeNodeInfo(const EAPoLNodeInfo& node); | ||
| 149 | |||
| 150 | /* | ||
| 151 | * Generates an unencrypted 802.11 data frame body with the EAPoL-Logoff format for UDS | ||
| 152 | * communication. | ||
| 153 | * @returns The generated frame body. | ||
| 154 | */ | ||
| 155 | std::vector<u8> GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 network_node_id, | ||
| 156 | const NodeList& nodes, u8 max_nodes, u8 total_nodes); | ||
| 157 | |||
| 158 | /* | ||
| 159 | * Returns a EAPoLLogoffPacket representing the specified 802.11-encapsulated data frame. | ||
| 160 | */ | ||
| 161 | EAPoLLogoffPacket ParseEAPoLLogoffFrame(const std::vector<u8>& frame); | ||
| 162 | |||
| 77 | } // namespace NWM | 163 | } // namespace NWM |
| 78 | } // namespace Service | 164 | } // namespace Service |
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index aad950e50..f267aad74 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp | |||
| @@ -38,7 +38,7 @@ | |||
| 38 | #include "core/hle/service/news/news.h" | 38 | #include "core/hle/service/news/news.h" |
| 39 | #include "core/hle/service/nfc/nfc.h" | 39 | #include "core/hle/service/nfc/nfc.h" |
| 40 | #include "core/hle/service/nim/nim.h" | 40 | #include "core/hle/service/nim/nim.h" |
| 41 | #include "core/hle/service/ns_s.h" | 41 | #include "core/hle/service/ns/ns.h" |
| 42 | #include "core/hle/service/nwm/nwm.h" | 42 | #include "core/hle/service/nwm/nwm.h" |
| 43 | #include "core/hle/service/pm_app.h" | 43 | #include "core/hle/service/pm_app.h" |
| 44 | #include "core/hle/service/ptm/ptm.h" | 44 | #include "core/hle/service/ptm/ptm.h" |
| @@ -215,6 +215,8 @@ void Init() { | |||
| 215 | SM::g_service_manager = std::make_shared<SM::ServiceManager>(); | 215 | SM::g_service_manager = std::make_shared<SM::ServiceManager>(); |
| 216 | SM::ServiceManager::InstallInterfaces(SM::g_service_manager); | 216 | SM::ServiceManager::InstallInterfaces(SM::g_service_manager); |
| 217 | 217 | ||
| 218 | NS::InstallInterfaces(*SM::g_service_manager); | ||
| 219 | |||
| 218 | AddNamedPort(new ERR::ERR_F); | 220 | AddNamedPort(new ERR::ERR_F); |
| 219 | 221 | ||
| 220 | FS::ArchiveInit(); | 222 | FS::ArchiveInit(); |
| @@ -246,7 +248,6 @@ void Init() { | |||
| 246 | AddService(new HTTP::HTTP_C); | 248 | AddService(new HTTP::HTTP_C); |
| 247 | AddService(new LDR::LDR_RO); | 249 | AddService(new LDR::LDR_RO); |
| 248 | AddService(new MIC::MIC_U); | 250 | AddService(new MIC::MIC_U); |
| 249 | AddService(new NS::NS_S); | ||
| 250 | AddService(new PM::PM_APP); | 251 | AddService(new PM::PM_APP); |
| 251 | AddService(new SOC::SOC_U); | 252 | AddService(new SOC::SOC_U); |
| 252 | AddService(new SSL::SSL_C); | 253 | AddService(new SSL::SSL_C); |
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index 5e7fc68f9..854ab9a05 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp | |||
| @@ -36,6 +36,10 @@ ResultVal<Kernel::SharedPtr<Kernel::ServerPort>> ServiceManager::RegisterService | |||
| 36 | std::string name, unsigned int max_sessions) { | 36 | std::string name, unsigned int max_sessions) { |
| 37 | 37 | ||
| 38 | CASCADE_CODE(ValidateServiceName(name)); | 38 | CASCADE_CODE(ValidateServiceName(name)); |
| 39 | |||
| 40 | if (registered_services.find(name) != registered_services.end()) | ||
| 41 | return ERR_ALREADY_REGISTERED; | ||
| 42 | |||
| 39 | Kernel::SharedPtr<Kernel::ServerPort> server_port; | 43 | Kernel::SharedPtr<Kernel::ServerPort> server_port; |
| 40 | Kernel::SharedPtr<Kernel::ClientPort> client_port; | 44 | Kernel::SharedPtr<Kernel::ClientPort> client_port; |
| 41 | std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, name); | 45 | std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, name); |
diff --git a/src/core/hle/service/sm/sm.h b/src/core/hle/service/sm/sm.h index 8f0dbf2db..9f60a7965 100644 --- a/src/core/hle/service/sm/sm.h +++ b/src/core/hle/service/sm/sm.h | |||
| @@ -32,6 +32,9 @@ constexpr ResultCode ERR_ACCESS_DENIED(6, ErrorModule::SRV, ErrorSummary::Invali | |||
| 32 | ErrorLevel::Permanent); // 0xD8E06406 | 32 | ErrorLevel::Permanent); // 0xD8E06406 |
| 33 | constexpr ResultCode ERR_NAME_CONTAINS_NUL(7, ErrorModule::SRV, ErrorSummary::WrongArgument, | 33 | constexpr ResultCode ERR_NAME_CONTAINS_NUL(7, ErrorModule::SRV, ErrorSummary::WrongArgument, |
| 34 | ErrorLevel::Permanent); // 0xD9006407 | 34 | ErrorLevel::Permanent); // 0xD9006407 |
| 35 | constexpr ResultCode ERR_ALREADY_REGISTERED(ErrorDescription::AlreadyExists, ErrorModule::OS, | ||
| 36 | ErrorSummary::WrongArgument, | ||
| 37 | ErrorLevel::Permanent); // 0xD9001BFC | ||
| 35 | 38 | ||
| 36 | class ServiceManager { | 39 | class ServiceManager { |
| 37 | public: | 40 | public: |
diff --git a/src/core/hle/service/sm/srv.cpp b/src/core/hle/service/sm/srv.cpp index 352941e69..fb873981c 100644 --- a/src/core/hle/service/sm/srv.cpp +++ b/src/core/hle/service/sm/srv.cpp | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include "core/hle/kernel/errors.h" | 13 | #include "core/hle/kernel/errors.h" |
| 14 | #include "core/hle/kernel/hle_ipc.h" | 14 | #include "core/hle/kernel/hle_ipc.h" |
| 15 | #include "core/hle/kernel/semaphore.h" | 15 | #include "core/hle/kernel/semaphore.h" |
| 16 | #include "core/hle/kernel/server_port.h" | ||
| 16 | #include "core/hle/kernel/server_session.h" | 17 | #include "core/hle/kernel/server_session.h" |
| 17 | #include "core/hle/service/sm/sm.h" | 18 | #include "core/hle/service/sm/sm.h" |
| 18 | #include "core/hle/service/sm/srv.h" | 19 | #include "core/hle/service/sm/srv.h" |
| @@ -61,7 +62,7 @@ void SRV::EnableNotification(Kernel::HLERequestContext& ctx) { | |||
| 61 | IPC::RequestParser rp(ctx, 0x2, 0, 0); | 62 | IPC::RequestParser rp(ctx, 0x2, 0, 0); |
| 62 | 63 | ||
| 63 | notification_semaphore = | 64 | notification_semaphore = |
| 64 | Kernel::Semaphore::Create(0, MAX_PENDING_NOTIFICATIONS, "SRV:Notification").Unwrap(); | 65 | Kernel::Semaphore::Create(0, MAX_PENDING_NOTIFICATIONS, 0, "SRV:Notification").Unwrap(); |
| 65 | 66 | ||
| 66 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); | 67 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); |
| 67 | rb.Push(RESULT_SUCCESS); | 68 | rb.Push(RESULT_SUCCESS); |
| @@ -184,12 +185,35 @@ void SRV::PublishToSubscriber(Kernel::HLERequestContext& ctx) { | |||
| 184 | flags); | 185 | flags); |
| 185 | } | 186 | } |
| 186 | 187 | ||
| 188 | void SRV::RegisterService(Kernel::HLERequestContext& ctx) { | ||
| 189 | IPC::RequestParser rp(ctx, 0x3, 4, 0); | ||
| 190 | |||
| 191 | auto name_buf = rp.PopRaw<std::array<char, 8>>(); | ||
| 192 | size_t name_len = rp.Pop<u32>(); | ||
| 193 | u32 max_sessions = rp.Pop<u32>(); | ||
| 194 | |||
| 195 | std::string name(name_buf.data(), std::min(name_len, name_buf.size())); | ||
| 196 | |||
| 197 | auto port = service_manager->RegisterService(name, max_sessions); | ||
| 198 | |||
| 199 | if (port.Failed()) { | ||
| 200 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||
| 201 | rb.Push(port.Code()); | ||
| 202 | LOG_ERROR(Service_SRV, "called service=%s -> error 0x%08X", name.c_str(), port.Code().raw); | ||
| 203 | return; | ||
| 204 | } | ||
| 205 | |||
| 206 | IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); | ||
| 207 | rb.Push(RESULT_SUCCESS); | ||
| 208 | rb.PushObjects(port.Unwrap()); | ||
| 209 | } | ||
| 210 | |||
| 187 | SRV::SRV(std::shared_ptr<ServiceManager> service_manager) | 211 | SRV::SRV(std::shared_ptr<ServiceManager> service_manager) |
| 188 | : ServiceFramework("srv:", 4), service_manager(std::move(service_manager)) { | 212 | : ServiceFramework("srv:", 4), service_manager(std::move(service_manager)) { |
| 189 | static const FunctionInfo functions[] = { | 213 | static const FunctionInfo functions[] = { |
| 190 | {0x00010002, &SRV::RegisterClient, "RegisterClient"}, | 214 | {0x00010002, &SRV::RegisterClient, "RegisterClient"}, |
| 191 | {0x00020000, &SRV::EnableNotification, "EnableNotification"}, | 215 | {0x00020000, &SRV::EnableNotification, "EnableNotification"}, |
| 192 | {0x00030100, nullptr, "RegisterService"}, | 216 | {0x00030100, &SRV::RegisterService, "RegisterService"}, |
| 193 | {0x000400C0, nullptr, "UnregisterService"}, | 217 | {0x000400C0, nullptr, "UnregisterService"}, |
| 194 | {0x00050100, &SRV::GetServiceHandle, "GetServiceHandle"}, | 218 | {0x00050100, &SRV::GetServiceHandle, "GetServiceHandle"}, |
| 195 | {0x000600C2, nullptr, "RegisterPort"}, | 219 | {0x000600C2, nullptr, "RegisterPort"}, |
diff --git a/src/core/hle/service/sm/srv.h b/src/core/hle/service/sm/srv.h index 75cca5184..aad839563 100644 --- a/src/core/hle/service/sm/srv.h +++ b/src/core/hle/service/sm/srv.h | |||
| @@ -28,6 +28,7 @@ private: | |||
| 28 | void Subscribe(Kernel::HLERequestContext& ctx); | 28 | void Subscribe(Kernel::HLERequestContext& ctx); |
| 29 | void Unsubscribe(Kernel::HLERequestContext& ctx); | 29 | void Unsubscribe(Kernel::HLERequestContext& ctx); |
| 30 | void PublishToSubscriber(Kernel::HLERequestContext& ctx); | 30 | void PublishToSubscriber(Kernel::HLERequestContext& ctx); |
| 31 | void RegisterService(Kernel::HLERequestContext& ctx); | ||
| 31 | 32 | ||
| 32 | std::shared_ptr<ServiceManager> service_manager; | 33 | std::shared_ptr<ServiceManager> service_manager; |
| 33 | Kernel::SharedPtr<Kernel::Semaphore> notification_semaphore; | 34 | Kernel::SharedPtr<Kernel::Semaphore> notification_semaphore; |
diff --git a/src/core/hw/gpu.cpp b/src/core/hw/gpu.cpp index 6838e449c..d1bfe51e6 100644 --- a/src/core/hw/gpu.cpp +++ b/src/core/hw/gpu.cpp | |||
| @@ -29,7 +29,7 @@ namespace GPU { | |||
| 29 | Regs g_regs; | 29 | Regs g_regs; |
| 30 | 30 | ||
| 31 | /// 268MHz CPU clocks / 60Hz frames per second | 31 | /// 268MHz CPU clocks / 60Hz frames per second |
| 32 | const u64 frame_ticks = BASE_CLOCK_RATE_ARM11 / SCREEN_REFRESH_RATE; | 32 | const u64 frame_ticks = static_cast<u64>(BASE_CLOCK_RATE_ARM11 / SCREEN_REFRESH_RATE); |
| 33 | /// Event id for CoreTiming | 33 | /// Event id for CoreTiming |
| 34 | static int vblank_event; | 34 | static int vblank_event; |
| 35 | 35 | ||
| @@ -515,15 +515,15 @@ template void Write<u8>(u32 addr, const u8 data); | |||
| 515 | 515 | ||
| 516 | /// Update hardware | 516 | /// Update hardware |
| 517 | static void VBlankCallback(u64 userdata, int cycles_late) { | 517 | static void VBlankCallback(u64 userdata, int cycles_late) { |
| 518 | VideoCore::g_renderer->SwapBuffers(); | 518 | //VideoCore::g_renderer->SwapBuffers(); |
| 519 | 519 | ||
| 520 | // Signal to GSP that GPU interrupt has occurred | 520 | //// Signal to GSP that GPU interrupt has occurred |
| 521 | // TODO(yuriks): hwtest to determine if PDC0 is for the Top screen and PDC1 for the Sub | 521 | //// TODO(yuriks): hwtest to determine if PDC0 is for the Top screen and PDC1 for the Sub |
| 522 | // screen, or if both use the same interrupts and these two instead determine the | 522 | //// screen, or if both use the same interrupts and these two instead determine the |
| 523 | // beginning and end of the VBlank period. If needed, split the interrupt firing into | 523 | //// beginning and end of the VBlank period. If needed, split the interrupt firing into |
| 524 | // two different intervals. | 524 | //// two different intervals. |
| 525 | Service::GSP::SignalInterrupt(Service::GSP::InterruptId::PDC0); | 525 | //Service::GSP::SignalInterrupt(Service::GSP::InterruptId::PDC0); |
| 526 | Service::GSP::SignalInterrupt(Service::GSP::InterruptId::PDC1); | 526 | //Service::GSP::SignalInterrupt(Service::GSP::InterruptId::PDC1); |
| 527 | 527 | ||
| 528 | // Reschedule recurrent event | 528 | // Reschedule recurrent event |
| 529 | CoreTiming::ScheduleEvent(frame_ticks - cycles_late, vblank_event); | 529 | CoreTiming::ScheduleEvent(frame_ticks - cycles_late, vblank_event); |
diff --git a/src/core/hw/gpu.h b/src/core/hw/gpu.h index 21b127fee..e3d0a0e08 100644 --- a/src/core/hw/gpu.h +++ b/src/core/hw/gpu.h | |||
| @@ -74,9 +74,9 @@ struct Regs { | |||
| 74 | case PixelFormat::RGB5A1: | 74 | case PixelFormat::RGB5A1: |
| 75 | case PixelFormat::RGBA4: | 75 | case PixelFormat::RGBA4: |
| 76 | return 2; | 76 | return 2; |
| 77 | default: | ||
| 78 | UNIMPLEMENTED(); | ||
| 79 | } | 77 | } |
| 78 | |||
| 79 | UNREACHABLE(); | ||
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | INSERT_PADDING_WORDS(0x4); | 82 | INSERT_PADDING_WORDS(0x4); |
diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp index 209328347..7b0342cc9 100644 --- a/src/core/loader/3dsx.cpp +++ b/src/core/loader/3dsx.cpp | |||
| @@ -91,8 +91,8 @@ static u32 TranslateAddr(u32 addr, const THREEloadinfo* loadinfo, u32* offsets) | |||
| 91 | return loadinfo->seg_addrs[2] + addr - offsets[1]; | 91 | return loadinfo->seg_addrs[2] + addr - offsets[1]; |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | using Kernel::SharedPtr; | ||
| 95 | using Kernel::CodeSet; | 94 | using Kernel::CodeSet; |
| 95 | using Kernel::SharedPtr; | ||
| 96 | 96 | ||
| 97 | static THREEDSX_Error Load3DSXFile(FileUtil::IOFile& file, u32 base_addr, | 97 | static THREEDSX_Error Load3DSXFile(FileUtil::IOFile& file, u32 base_addr, |
| 98 | SharedPtr<CodeSet>* out_codeset) { | 98 | SharedPtr<CodeSet>* out_codeset) { |
| @@ -255,7 +255,7 @@ FileType AppLoader_THREEDSX::IdentifyType(FileUtil::IOFile& file) { | |||
| 255 | return FileType::Error; | 255 | return FileType::Error; |
| 256 | } | 256 | } |
| 257 | 257 | ||
| 258 | ResultStatus AppLoader_THREEDSX::Load() { | 258 | ResultStatus AppLoader_THREEDSX::Load(Kernel::SharedPtr<Kernel::Process>& process) { |
| 259 | if (is_loaded) | 259 | if (is_loaded) |
| 260 | return ResultStatus::ErrorAlreadyLoaded; | 260 | return ResultStatus::ErrorAlreadyLoaded; |
| 261 | 261 | ||
| @@ -267,19 +267,17 @@ ResultStatus AppLoader_THREEDSX::Load() { | |||
| 267 | return ResultStatus::Error; | 267 | return ResultStatus::Error; |
| 268 | codeset->name = filename; | 268 | codeset->name = filename; |
| 269 | 269 | ||
| 270 | Kernel::g_current_process = Kernel::Process::Create("main"); | 270 | process = Kernel::Process::Create("main"); |
| 271 | Kernel::g_current_process->LoadModule(codeset, codeset->entrypoint); | 271 | process->LoadModule(codeset, codeset->entrypoint); |
| 272 | Kernel::g_current_process->svc_access_mask.set(); | 272 | process->svc_access_mask.set(); |
| 273 | Kernel::g_current_process->address_mappings = default_address_mappings; | 273 | process->address_mappings = default_address_mappings; |
| 274 | 274 | ||
| 275 | // Attach the default resource limit (APPLICATION) to the process | 275 | // Attach the default resource limit (APPLICATION) to the process |
| 276 | Kernel::g_current_process->resource_limit = | 276 | process->resource_limit = |
| 277 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | 277 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); |
| 278 | process->Run(codeset->entrypoint, 48, Kernel::DEFAULT_STACK_SIZE); | ||
| 278 | 279 | ||
| 279 | Kernel::g_current_process->Run(codeset->entrypoint, 48, Kernel::DEFAULT_STACK_SIZE); | 280 | Service::FS::RegisterSelfNCCH(*this); |
| 280 | |||
| 281 | Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(*this), | ||
| 282 | Service::FS::ArchiveIdCode::SelfNCCH); | ||
| 283 | 281 | ||
| 284 | is_loaded = true; | 282 | is_loaded = true; |
| 285 | return ResultStatus::Success; | 283 | return ResultStatus::Success; |
diff --git a/src/core/loader/3dsx.h b/src/core/loader/3dsx.h index 3f376778a..1e59bbb9d 100644 --- a/src/core/loader/3dsx.h +++ b/src/core/loader/3dsx.h | |||
| @@ -31,7 +31,7 @@ public: | |||
| 31 | return IdentifyType(file); | 31 | return IdentifyType(file); |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | ResultStatus Load() override; | 34 | ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override; |
| 35 | 35 | ||
| 36 | ResultStatus ReadIcon(std::vector<u8>& buffer) override; | 36 | ResultStatus ReadIcon(std::vector<u8>& buffer) override; |
| 37 | 37 | ||
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index 2efc67ff8..9969a8c39 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp | |||
| @@ -13,8 +13,8 @@ | |||
| 13 | #include "core/loader/elf.h" | 13 | #include "core/loader/elf.h" |
| 14 | #include "core/memory.h" | 14 | #include "core/memory.h" |
| 15 | 15 | ||
| 16 | using Kernel::SharedPtr; | ||
| 17 | using Kernel::CodeSet; | 16 | using Kernel::CodeSet; |
| 17 | using Kernel::SharedPtr; | ||
| 18 | 18 | ||
| 19 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 19 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 20 | // ELF Header Constants | 20 | // ELF Header Constants |
| @@ -382,7 +382,7 @@ FileType AppLoader_ELF::IdentifyType(FileUtil::IOFile& file) { | |||
| 382 | return FileType::Error; | 382 | return FileType::Error; |
| 383 | } | 383 | } |
| 384 | 384 | ||
| 385 | ResultStatus AppLoader_ELF::Load() { | 385 | ResultStatus AppLoader_ELF::Load(Kernel::SharedPtr<Kernel::Process>& process) { |
| 386 | if (is_loaded) | 386 | if (is_loaded) |
| 387 | return ResultStatus::ErrorAlreadyLoaded; | 387 | return ResultStatus::ErrorAlreadyLoaded; |
| 388 | 388 | ||
| @@ -401,16 +401,16 @@ ResultStatus AppLoader_ELF::Load() { | |||
| 401 | SharedPtr<CodeSet> codeset = elf_reader.LoadInto(Memory::PROCESS_IMAGE_VADDR); | 401 | SharedPtr<CodeSet> codeset = elf_reader.LoadInto(Memory::PROCESS_IMAGE_VADDR); |
| 402 | codeset->name = filename; | 402 | codeset->name = filename; |
| 403 | 403 | ||
| 404 | Kernel::g_current_process = Kernel::Process::Create("main"); | 404 | process = Kernel::Process::Create("main"); |
| 405 | Kernel::g_current_process->LoadModule(codeset, codeset->entrypoint); | 405 | process->LoadModule(codeset, codeset->entrypoint); |
| 406 | Kernel::g_current_process->svc_access_mask.set(); | 406 | process->svc_access_mask.set(); |
| 407 | Kernel::g_current_process->address_mappings = default_address_mappings; | 407 | process->address_mappings = default_address_mappings; |
| 408 | 408 | ||
| 409 | // Attach the default resource limit (APPLICATION) to the process | 409 | // Attach the default resource limit (APPLICATION) to the process |
| 410 | Kernel::g_current_process->resource_limit = | 410 | process->resource_limit = |
| 411 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | 411 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); |
| 412 | 412 | ||
| 413 | Kernel::g_current_process->Run(codeset->entrypoint, 48, Kernel::DEFAULT_STACK_SIZE); | 413 | process->Run(codeset->entrypoint, 48, Kernel::DEFAULT_STACK_SIZE); |
| 414 | 414 | ||
| 415 | is_loaded = true; | 415 | is_loaded = true; |
| 416 | return ResultStatus::Success; | 416 | return ResultStatus::Success; |
diff --git a/src/core/loader/elf.h b/src/core/loader/elf.h index 862aa90d8..113da5917 100644 --- a/src/core/loader/elf.h +++ b/src/core/loader/elf.h | |||
| @@ -30,7 +30,7 @@ public: | |||
| 30 | return IdentifyType(file); | 30 | return IdentifyType(file); |
| 31 | } | 31 | } |
| 32 | 32 | ||
| 33 | ResultStatus Load() override; | 33 | ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override; |
| 34 | 34 | ||
| 35 | private: | 35 | private: |
| 36 | std::string filename; | 36 | std::string filename; |
diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index ac26f31fa..311785d05 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h | |||
| @@ -13,10 +13,12 @@ | |||
| 13 | #include <boost/optional.hpp> | 13 | #include <boost/optional.hpp> |
| 14 | #include "common/common_types.h" | 14 | #include "common/common_types.h" |
| 15 | #include "common/file_util.h" | 15 | #include "common/file_util.h" |
| 16 | #include "core/hle/kernel/kernel.h" | ||
| 16 | 17 | ||
| 17 | namespace Kernel { | 18 | namespace Kernel { |
| 18 | struct AddressMapping; | 19 | struct AddressMapping; |
| 19 | } | 20 | class Process; |
| 21 | } // namespace Kernel | ||
| 20 | 22 | ||
| 21 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 23 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 22 | // Loader namespace | 24 | // Loader namespace |
| @@ -94,10 +96,11 @@ public: | |||
| 94 | virtual FileType GetFileType() = 0; | 96 | virtual FileType GetFileType() = 0; |
| 95 | 97 | ||
| 96 | /** | 98 | /** |
| 97 | * Load the application | 99 | * Load the application and return the created Process instance |
| 98 | * @return ResultStatus result of function | 100 | * @param process The newly created process. |
| 101 | * @return The status result of the operation. | ||
| 99 | */ | 102 | */ |
| 100 | virtual ResultStatus Load() = 0; | 103 | virtual ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) = 0; |
| 101 | 104 | ||
| 102 | /** | 105 | /** |
| 103 | * Loads the system mode that this application needs. | 106 | * Loads the system mode that this application needs. |
| @@ -168,6 +171,28 @@ public: | |||
| 168 | return ResultStatus::ErrorNotImplemented; | 171 | return ResultStatus::ErrorNotImplemented; |
| 169 | } | 172 | } |
| 170 | 173 | ||
| 174 | /** | ||
| 175 | * Get the update RomFS of the application | ||
| 176 | * Since the RomFS can be huge, we return a file reference instead of copying to a buffer | ||
| 177 | * @param romfs_file The file containing the RomFS | ||
| 178 | * @param offset The offset the romfs begins on | ||
| 179 | * @param size The size of the romfs | ||
| 180 | * @return ResultStatus result of function | ||
| 181 | */ | ||
| 182 | virtual ResultStatus ReadUpdateRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, | ||
| 183 | u64& size) { | ||
| 184 | return ResultStatus::ErrorNotImplemented; | ||
| 185 | } | ||
| 186 | |||
| 187 | /** | ||
| 188 | * Get the title of the application | ||
| 189 | * @param title Reference to store the application title into | ||
| 190 | * @return ResultStatus result of function | ||
| 191 | */ | ||
| 192 | virtual ResultStatus ReadTitle(std::string& title) { | ||
| 193 | return ResultStatus::ErrorNotImplemented; | ||
| 194 | } | ||
| 195 | |||
| 171 | protected: | 196 | protected: |
| 172 | FileUtil::IOFile file; | 197 | FileUtil::IOFile file; |
| 173 | bool is_loaded = false; | 198 | bool is_loaded = false; |
| @@ -186,4 +211,4 @@ extern const std::initializer_list<Kernel::AddressMapping> default_address_mappi | |||
| 186 | */ | 211 | */ |
| 187 | std::unique_ptr<AppLoader> GetLoader(const std::string& filename); | 212 | std::unique_ptr<AppLoader> GetLoader(const std::string& filename); |
| 188 | 213 | ||
| 189 | } // namespace | 214 | } // namespace Loader |
diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 728886ea8..e33a37b2e 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp | |||
| @@ -4,13 +4,17 @@ | |||
| 4 | 4 | ||
| 5 | #include <algorithm> | 5 | #include <algorithm> |
| 6 | #include <cinttypes> | 6 | #include <cinttypes> |
| 7 | #include <codecvt> | ||
| 7 | #include <cstring> | 8 | #include <cstring> |
| 9 | #include <locale> | ||
| 8 | #include <memory> | 10 | #include <memory> |
| 9 | #include "common/logging/log.h" | 11 | #include "common/logging/log.h" |
| 10 | #include "common/string_util.h" | 12 | #include "common/string_util.h" |
| 11 | #include "common/swap.h" | 13 | #include "common/swap.h" |
| 12 | #include "core/core.h" | 14 | #include "core/core.h" |
| 13 | #include "core/file_sys/archive_selfncch.h" | 15 | #include "core/file_sys/archive_selfncch.h" |
| 16 | #include "core/file_sys/ncch_container.h" | ||
| 17 | #include "core/file_sys/title_metadata.h" | ||
| 14 | #include "core/hle/kernel/process.h" | 18 | #include "core/hle/kernel/process.h" |
| 15 | #include "core/hle/kernel/resource_limit.h" | 19 | #include "core/hle/kernel/resource_limit.h" |
| 16 | #include "core/hle/service/cfg/cfg.h" | 20 | #include "core/hle/service/cfg/cfg.h" |
| @@ -18,93 +22,14 @@ | |||
| 18 | #include "core/loader/ncch.h" | 22 | #include "core/loader/ncch.h" |
| 19 | #include "core/loader/smdh.h" | 23 | #include "core/loader/smdh.h" |
| 20 | #include "core/memory.h" | 24 | #include "core/memory.h" |
| 25 | #include "network/network.h" | ||
| 21 | 26 | ||
| 22 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 27 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 23 | // Loader namespace | 28 | // Loader namespace |
| 24 | 29 | ||
| 25 | namespace Loader { | 30 | namespace Loader { |
| 26 | 31 | ||
| 27 | static const int kMaxSections = 8; ///< Maximum number of sections (files) in an ExeFs | 32 | static const u64 UPDATE_MASK = 0x0000000e00000000; |
| 28 | static const int kBlockSize = 0x200; ///< Size of ExeFS blocks (in bytes) | ||
| 29 | |||
| 30 | /** | ||
| 31 | * Get the decompressed size of an LZSS compressed ExeFS file | ||
| 32 | * @param buffer Buffer of compressed file | ||
| 33 | * @param size Size of compressed buffer | ||
| 34 | * @return Size of decompressed buffer | ||
| 35 | */ | ||
| 36 | static u32 LZSS_GetDecompressedSize(const u8* buffer, u32 size) { | ||
| 37 | u32 offset_size = *(u32*)(buffer + size - 4); | ||
| 38 | return offset_size + size; | ||
| 39 | } | ||
| 40 | |||
| 41 | /** | ||
| 42 | * Decompress ExeFS file (compressed with LZSS) | ||
| 43 | * @param compressed Compressed buffer | ||
| 44 | * @param compressed_size Size of compressed buffer | ||
| 45 | * @param decompressed Decompressed buffer | ||
| 46 | * @param decompressed_size Size of decompressed buffer | ||
| 47 | * @return True on success, otherwise false | ||
| 48 | */ | ||
| 49 | static bool LZSS_Decompress(const u8* compressed, u32 compressed_size, u8* decompressed, | ||
| 50 | u32 decompressed_size) { | ||
| 51 | const u8* footer = compressed + compressed_size - 8; | ||
| 52 | u32 buffer_top_and_bottom = *reinterpret_cast<const u32*>(footer); | ||
| 53 | u32 out = decompressed_size; | ||
| 54 | u32 index = compressed_size - ((buffer_top_and_bottom >> 24) & 0xFF); | ||
| 55 | u32 stop_index = compressed_size - (buffer_top_and_bottom & 0xFFFFFF); | ||
| 56 | |||
| 57 | memset(decompressed, 0, decompressed_size); | ||
| 58 | memcpy(decompressed, compressed, compressed_size); | ||
| 59 | |||
| 60 | while (index > stop_index) { | ||
| 61 | u8 control = compressed[--index]; | ||
| 62 | |||
| 63 | for (unsigned i = 0; i < 8; i++) { | ||
| 64 | if (index <= stop_index) | ||
| 65 | break; | ||
| 66 | if (index <= 0) | ||
| 67 | break; | ||
| 68 | if (out <= 0) | ||
| 69 | break; | ||
| 70 | |||
| 71 | if (control & 0x80) { | ||
| 72 | // Check if compression is out of bounds | ||
| 73 | if (index < 2) | ||
| 74 | return false; | ||
| 75 | index -= 2; | ||
| 76 | |||
| 77 | u32 segment_offset = compressed[index] | (compressed[index + 1] << 8); | ||
| 78 | u32 segment_size = ((segment_offset >> 12) & 15) + 3; | ||
| 79 | segment_offset &= 0x0FFF; | ||
| 80 | segment_offset += 2; | ||
| 81 | |||
| 82 | // Check if compression is out of bounds | ||
| 83 | if (out < segment_size) | ||
| 84 | return false; | ||
| 85 | |||
| 86 | for (unsigned j = 0; j < segment_size; j++) { | ||
| 87 | // Check if compression is out of bounds | ||
| 88 | if (out + segment_offset >= decompressed_size) | ||
| 89 | return false; | ||
| 90 | |||
| 91 | u8 data = decompressed[out + segment_offset]; | ||
| 92 | decompressed[--out] = data; | ||
| 93 | } | ||
| 94 | } else { | ||
| 95 | // Check if compression is out of bounds | ||
| 96 | if (out < 1) | ||
| 97 | return false; | ||
| 98 | decompressed[--out] = compressed[--index]; | ||
| 99 | } | ||
| 100 | control <<= 1; | ||
| 101 | } | ||
| 102 | } | ||
| 103 | return true; | ||
| 104 | } | ||
| 105 | |||
| 106 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 107 | // AppLoader_NCCH class | ||
| 108 | 33 | ||
| 109 | FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) { | 34 | FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) { |
| 110 | u32 magic; | 35 | u32 magic; |
| @@ -121,203 +46,105 @@ FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) { | |||
| 121 | return FileType::Error; | 46 | return FileType::Error; |
| 122 | } | 47 | } |
| 123 | 48 | ||
| 49 | static std::string GetUpdateNCCHPath(u64_le program_id) { | ||
| 50 | u32 high = static_cast<u32>((program_id | UPDATE_MASK) >> 32); | ||
| 51 | u32 low = static_cast<u32>((program_id | UPDATE_MASK) & 0xFFFFFFFF); | ||
| 52 | |||
| 53 | // TODO(shinyquagsire23): Title database should be doing this path lookup | ||
| 54 | std::string content_path = Common::StringFromFormat( | ||
| 55 | "%sNintendo 3DS/%s/%s/title/%08x/%08x/content/", FileUtil::GetUserPath(D_SDMC_IDX).c_str(), | ||
| 56 | SYSTEM_ID, SDCARD_ID, high, low); | ||
| 57 | std::string tmd_path = content_path + "00000000.tmd"; | ||
| 58 | |||
| 59 | u32 content_id = 0; | ||
| 60 | FileSys::TitleMetadata tmd(tmd_path); | ||
| 61 | if (tmd.Load() == ResultStatus::Success) { | ||
| 62 | content_id = tmd.GetBootContentID(); | ||
| 63 | } | ||
| 64 | |||
| 65 | return Common::StringFromFormat("%s%08x.app", content_path.c_str(), content_id); | ||
| 66 | } | ||
| 67 | |||
| 124 | std::pair<boost::optional<u32>, ResultStatus> AppLoader_NCCH::LoadKernelSystemMode() { | 68 | std::pair<boost::optional<u32>, ResultStatus> AppLoader_NCCH::LoadKernelSystemMode() { |
| 125 | if (!is_loaded) { | 69 | if (!is_loaded) { |
| 126 | ResultStatus res = LoadExeFS(); | 70 | ResultStatus res = base_ncch.Load(); |
| 127 | if (res != ResultStatus::Success) { | 71 | if (res != ResultStatus::Success) { |
| 128 | return std::make_pair(boost::none, res); | 72 | return std::make_pair(boost::none, res); |
| 129 | } | 73 | } |
| 130 | } | 74 | } |
| 75 | |||
| 131 | // Set the system mode as the one from the exheader. | 76 | // Set the system mode as the one from the exheader. |
| 132 | return std::make_pair(exheader_header.arm11_system_local_caps.system_mode.Value(), | 77 | return std::make_pair(overlay_ncch->exheader_header.arm11_system_local_caps.system_mode.Value(), |
| 133 | ResultStatus::Success); | 78 | ResultStatus::Success); |
| 134 | } | 79 | } |
| 135 | 80 | ||
| 136 | ResultStatus AppLoader_NCCH::LoadExec() { | 81 | ResultStatus AppLoader_NCCH::LoadExec(Kernel::SharedPtr<Kernel::Process>& process) { |
| 137 | using Kernel::SharedPtr; | ||
| 138 | using Kernel::CodeSet; | 82 | using Kernel::CodeSet; |
| 83 | using Kernel::SharedPtr; | ||
| 139 | 84 | ||
| 140 | if (!is_loaded) | 85 | if (!is_loaded) |
| 141 | return ResultStatus::ErrorNotLoaded; | 86 | return ResultStatus::ErrorNotLoaded; |
| 142 | 87 | ||
| 143 | std::vector<u8> code; | 88 | std::vector<u8> code; |
| 144 | if (ResultStatus::Success == ReadCode(code)) { | 89 | u64_le program_id; |
| 90 | if (ResultStatus::Success == ReadCode(code) && | ||
| 91 | ResultStatus::Success == ReadProgramId(program_id)) { | ||
| 145 | std::string process_name = Common::StringFromFixedZeroTerminatedBuffer( | 92 | std::string process_name = Common::StringFromFixedZeroTerminatedBuffer( |
| 146 | (const char*)exheader_header.codeset_info.name, 8); | 93 | (const char*)overlay_ncch->exheader_header.codeset_info.name, 8); |
| 147 | 94 | ||
| 148 | SharedPtr<CodeSet> codeset = CodeSet::Create(process_name, ncch_header.program_id); | 95 | SharedPtr<CodeSet> codeset = CodeSet::Create(process_name, program_id); |
| 149 | 96 | ||
| 150 | codeset->code.offset = 0; | 97 | codeset->code.offset = 0; |
| 151 | codeset->code.addr = exheader_header.codeset_info.text.address; | 98 | codeset->code.addr = overlay_ncch->exheader_header.codeset_info.text.address; |
| 152 | codeset->code.size = exheader_header.codeset_info.text.num_max_pages * Memory::PAGE_SIZE; | 99 | codeset->code.size = |
| 100 | overlay_ncch->exheader_header.codeset_info.text.num_max_pages * Memory::PAGE_SIZE; | ||
| 153 | 101 | ||
| 154 | codeset->rodata.offset = codeset->code.offset + codeset->code.size; | 102 | codeset->rodata.offset = codeset->code.offset + codeset->code.size; |
| 155 | codeset->rodata.addr = exheader_header.codeset_info.ro.address; | 103 | codeset->rodata.addr = overlay_ncch->exheader_header.codeset_info.ro.address; |
| 156 | codeset->rodata.size = exheader_header.codeset_info.ro.num_max_pages * Memory::PAGE_SIZE; | 104 | codeset->rodata.size = |
| 105 | overlay_ncch->exheader_header.codeset_info.ro.num_max_pages * Memory::PAGE_SIZE; | ||
| 157 | 106 | ||
| 158 | // TODO(yuriks): Not sure if the bss size is added to the page-aligned .data size or just | 107 | // TODO(yuriks): Not sure if the bss size is added to the page-aligned .data size or just |
| 159 | // to the regular size. Playing it safe for now. | 108 | // to the regular size. Playing it safe for now. |
| 160 | u32 bss_page_size = (exheader_header.codeset_info.bss_size + 0xFFF) & ~0xFFF; | 109 | u32 bss_page_size = (overlay_ncch->exheader_header.codeset_info.bss_size + 0xFFF) & ~0xFFF; |
| 161 | code.resize(code.size() + bss_page_size, 0); | 110 | code.resize(code.size() + bss_page_size, 0); |
| 162 | 111 | ||
| 163 | codeset->data.offset = codeset->rodata.offset + codeset->rodata.size; | 112 | codeset->data.offset = codeset->rodata.offset + codeset->rodata.size; |
| 164 | codeset->data.addr = exheader_header.codeset_info.data.address; | 113 | codeset->data.addr = overlay_ncch->exheader_header.codeset_info.data.address; |
| 165 | codeset->data.size = | 114 | codeset->data.size = |
| 166 | exheader_header.codeset_info.data.num_max_pages * Memory::PAGE_SIZE + bss_page_size; | 115 | overlay_ncch->exheader_header.codeset_info.data.num_max_pages * Memory::PAGE_SIZE + |
| 116 | bss_page_size; | ||
| 167 | 117 | ||
| 168 | codeset->entrypoint = codeset->code.addr; | 118 | codeset->entrypoint = codeset->code.addr; |
| 169 | codeset->memory = std::make_shared<std::vector<u8>>(std::move(code)); | 119 | codeset->memory = std::make_shared<std::vector<u8>>(std::move(code)); |
| 170 | 120 | ||
| 171 | Kernel::g_current_process = Kernel::Process::Create("main"); | 121 | process = Kernel::Process::Create("main"); |
| 172 | Kernel::g_current_process->LoadModule(codeset, codeset->entrypoint); | 122 | process->LoadModule(codeset, codeset->entrypoint); |
| 173 | 123 | ||
| 174 | // Attach a resource limit to the process based on the resource limit category | 124 | // Attach a resource limit to the process based on the resource limit category |
| 175 | Kernel::g_current_process->resource_limit = | 125 | process->resource_limit = |
| 176 | Kernel::ResourceLimit::GetForCategory(static_cast<Kernel::ResourceLimitCategory>( | 126 | Kernel::ResourceLimit::GetForCategory(static_cast<Kernel::ResourceLimitCategory>( |
| 177 | exheader_header.arm11_system_local_caps.resource_limit_category)); | 127 | overlay_ncch->exheader_header.arm11_system_local_caps.resource_limit_category)); |
| 178 | 128 | ||
| 179 | // Set the default CPU core for this process | 129 | // Set the default CPU core for this process |
| 180 | Kernel::g_current_process->ideal_processor = | 130 | process->ideal_processor = |
| 181 | exheader_header.arm11_system_local_caps.ideal_processor; | 131 | overlay_ncch->exheader_header.arm11_system_local_caps.ideal_processor; |
| 182 | 132 | ||
| 183 | // Copy data while converting endianness | 133 | // Copy data while converting endianness |
| 184 | std::array<u32, ARRAY_SIZE(exheader_header.arm11_kernel_caps.descriptors)> kernel_caps; | 134 | std::array<u32, ARRAY_SIZE(overlay_ncch->exheader_header.arm11_kernel_caps.descriptors)> |
| 185 | std::copy_n(exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(), | 135 | kernel_caps; |
| 136 | std::copy_n(overlay_ncch->exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(), | ||
| 186 | begin(kernel_caps)); | 137 | begin(kernel_caps)); |
| 187 | Kernel::g_current_process->ParseKernelCaps(kernel_caps.data(), kernel_caps.size()); | 138 | process->ParseKernelCaps(kernel_caps.data(), kernel_caps.size()); |
| 188 | 139 | ||
| 189 | s32 priority = exheader_header.arm11_system_local_caps.priority; | 140 | s32 priority = overlay_ncch->exheader_header.arm11_system_local_caps.priority; |
| 190 | u32 stack_size = exheader_header.codeset_info.stack_size; | 141 | u32 stack_size = overlay_ncch->exheader_header.codeset_info.stack_size; |
| 191 | Kernel::g_current_process->Run(codeset->entrypoint, priority, stack_size); | 142 | process->Run(codeset->entrypoint, priority, stack_size); |
| 192 | return ResultStatus::Success; | 143 | return ResultStatus::Success; |
| 193 | } | 144 | } |
| 194 | return ResultStatus::Error; | 145 | return ResultStatus::Error; |
| 195 | } | 146 | } |
| 196 | 147 | ||
| 197 | ResultStatus AppLoader_NCCH::LoadSectionExeFS(const char* name, std::vector<u8>& buffer) { | ||
| 198 | if (!file.IsOpen()) | ||
| 199 | return ResultStatus::Error; | ||
| 200 | |||
| 201 | ResultStatus result = LoadExeFS(); | ||
| 202 | if (result != ResultStatus::Success) | ||
| 203 | return result; | ||
| 204 | |||
| 205 | LOG_DEBUG(Loader, "%d sections:", kMaxSections); | ||
| 206 | // Iterate through the ExeFs archive until we find a section with the specified name... | ||
| 207 | for (unsigned section_number = 0; section_number < kMaxSections; section_number++) { | ||
| 208 | const auto& section = exefs_header.section[section_number]; | ||
| 209 | |||
| 210 | // Load the specified section... | ||
| 211 | if (strcmp(section.name, name) == 0) { | ||
| 212 | LOG_DEBUG(Loader, "%d - offset: 0x%08X, size: 0x%08X, name: %s", section_number, | ||
| 213 | section.offset, section.size, section.name); | ||
| 214 | |||
| 215 | s64 section_offset = | ||
| 216 | (section.offset + exefs_offset + sizeof(ExeFs_Header) + ncch_offset); | ||
| 217 | file.Seek(section_offset, SEEK_SET); | ||
| 218 | |||
| 219 | if (strcmp(section.name, ".code") == 0 && is_compressed) { | ||
| 220 | // Section is compressed, read compressed .code section... | ||
| 221 | std::unique_ptr<u8[]> temp_buffer; | ||
| 222 | try { | ||
| 223 | temp_buffer.reset(new u8[section.size]); | ||
| 224 | } catch (std::bad_alloc&) { | ||
| 225 | return ResultStatus::ErrorMemoryAllocationFailed; | ||
| 226 | } | ||
| 227 | |||
| 228 | if (file.ReadBytes(&temp_buffer[0], section.size) != section.size) | ||
| 229 | return ResultStatus::Error; | ||
| 230 | |||
| 231 | // Decompress .code section... | ||
| 232 | u32 decompressed_size = LZSS_GetDecompressedSize(&temp_buffer[0], section.size); | ||
| 233 | buffer.resize(decompressed_size); | ||
| 234 | if (!LZSS_Decompress(&temp_buffer[0], section.size, &buffer[0], decompressed_size)) | ||
| 235 | return ResultStatus::ErrorInvalidFormat; | ||
| 236 | } else { | ||
| 237 | // Section is uncompressed... | ||
| 238 | buffer.resize(section.size); | ||
| 239 | if (file.ReadBytes(&buffer[0], section.size) != section.size) | ||
| 240 | return ResultStatus::Error; | ||
| 241 | } | ||
| 242 | return ResultStatus::Success; | ||
| 243 | } | ||
| 244 | } | ||
| 245 | return ResultStatus::ErrorNotUsed; | ||
| 246 | } | ||
| 247 | |||
| 248 | ResultStatus AppLoader_NCCH::LoadExeFS() { | ||
| 249 | if (is_exefs_loaded) | ||
| 250 | return ResultStatus::Success; | ||
| 251 | |||
| 252 | if (!file.IsOpen()) | ||
| 253 | return ResultStatus::Error; | ||
| 254 | |||
| 255 | // Reset read pointer in case this file has been read before. | ||
| 256 | file.Seek(0, SEEK_SET); | ||
| 257 | |||
| 258 | if (file.ReadBytes(&ncch_header, sizeof(NCCH_Header)) != sizeof(NCCH_Header)) | ||
| 259 | return ResultStatus::Error; | ||
| 260 | |||
| 261 | // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)... | ||
| 262 | if (MakeMagic('N', 'C', 'S', 'D') == ncch_header.magic) { | ||
| 263 | LOG_DEBUG(Loader, "Only loading the first (bootable) NCCH within the NCSD file!"); | ||
| 264 | ncch_offset = 0x4000; | ||
| 265 | file.Seek(ncch_offset, SEEK_SET); | ||
| 266 | file.ReadBytes(&ncch_header, sizeof(NCCH_Header)); | ||
| 267 | } | ||
| 268 | |||
| 269 | // Verify we are loading the correct file type... | ||
| 270 | if (MakeMagic('N', 'C', 'C', 'H') != ncch_header.magic) | ||
| 271 | return ResultStatus::ErrorInvalidFormat; | ||
| 272 | |||
| 273 | // Read ExHeader... | ||
| 274 | |||
| 275 | if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) != sizeof(ExHeader_Header)) | ||
| 276 | return ResultStatus::Error; | ||
| 277 | |||
| 278 | is_compressed = (exheader_header.codeset_info.flags.flag & 1) == 1; | ||
| 279 | entry_point = exheader_header.codeset_info.text.address; | ||
| 280 | code_size = exheader_header.codeset_info.text.code_size; | ||
| 281 | stack_size = exheader_header.codeset_info.stack_size; | ||
| 282 | bss_size = exheader_header.codeset_info.bss_size; | ||
| 283 | core_version = exheader_header.arm11_system_local_caps.core_version; | ||
| 284 | priority = exheader_header.arm11_system_local_caps.priority; | ||
| 285 | resource_limit_category = exheader_header.arm11_system_local_caps.resource_limit_category; | ||
| 286 | |||
| 287 | LOG_DEBUG(Loader, "Name: %s", exheader_header.codeset_info.name); | ||
| 288 | LOG_DEBUG(Loader, "Program ID: %016" PRIX64, ncch_header.program_id); | ||
| 289 | LOG_DEBUG(Loader, "Code compressed: %s", is_compressed ? "yes" : "no"); | ||
| 290 | LOG_DEBUG(Loader, "Entry point: 0x%08X", entry_point); | ||
| 291 | LOG_DEBUG(Loader, "Code size: 0x%08X", code_size); | ||
| 292 | LOG_DEBUG(Loader, "Stack size: 0x%08X", stack_size); | ||
| 293 | LOG_DEBUG(Loader, "Bss size: 0x%08X", bss_size); | ||
| 294 | LOG_DEBUG(Loader, "Core version: %d", core_version); | ||
| 295 | LOG_DEBUG(Loader, "Thread priority: 0x%X", priority); | ||
| 296 | LOG_DEBUG(Loader, "Resource limit category: %d", resource_limit_category); | ||
| 297 | LOG_DEBUG(Loader, "System Mode: %d", | ||
| 298 | static_cast<int>(exheader_header.arm11_system_local_caps.system_mode)); | ||
| 299 | |||
| 300 | if (exheader_header.arm11_system_local_caps.program_id != ncch_header.program_id) { | ||
| 301 | LOG_ERROR(Loader, "ExHeader Program ID mismatch: the ROM is probably encrypted."); | ||
| 302 | return ResultStatus::ErrorEncrypted; | ||
| 303 | } | ||
| 304 | |||
| 305 | // Read ExeFS... | ||
| 306 | |||
| 307 | exefs_offset = ncch_header.exefs_offset * kBlockSize; | ||
| 308 | u32 exefs_size = ncch_header.exefs_size * kBlockSize; | ||
| 309 | |||
| 310 | LOG_DEBUG(Loader, "ExeFS offset: 0x%08X", exefs_offset); | ||
| 311 | LOG_DEBUG(Loader, "ExeFS size: 0x%08X", exefs_size); | ||
| 312 | |||
| 313 | file.Seek(exefs_offset + ncch_offset, SEEK_SET); | ||
| 314 | if (file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) != sizeof(ExeFs_Header)) | ||
| 315 | return ResultStatus::Error; | ||
| 316 | |||
| 317 | is_exefs_loaded = true; | ||
| 318 | return ResultStatus::Success; | ||
| 319 | } | ||
| 320 | |||
| 321 | void AppLoader_NCCH::ParseRegionLockoutInfo() { | 148 | void AppLoader_NCCH::ParseRegionLockoutInfo() { |
| 322 | std::vector<u8> smdh_buffer; | 149 | std::vector<u8> smdh_buffer; |
| 323 | if (ReadIcon(smdh_buffer) == ResultStatus::Success && smdh_buffer.size() >= sizeof(SMDH)) { | 150 | if (ReadIcon(smdh_buffer) == ResultStatus::Success && smdh_buffer.size() >= sizeof(SMDH)) { |
| @@ -335,28 +162,43 @@ void AppLoader_NCCH::ParseRegionLockoutInfo() { | |||
| 335 | } | 162 | } |
| 336 | } | 163 | } |
| 337 | 164 | ||
| 338 | ResultStatus AppLoader_NCCH::Load() { | 165 | ResultStatus AppLoader_NCCH::Load(Kernel::SharedPtr<Kernel::Process>& process) { |
| 166 | u64_le ncch_program_id; | ||
| 167 | |||
| 339 | if (is_loaded) | 168 | if (is_loaded) |
| 340 | return ResultStatus::ErrorAlreadyLoaded; | 169 | return ResultStatus::ErrorAlreadyLoaded; |
| 341 | 170 | ||
| 342 | ResultStatus result = LoadExeFS(); | 171 | ResultStatus result = base_ncch.Load(); |
| 343 | if (result != ResultStatus::Success) | 172 | if (result != ResultStatus::Success) |
| 344 | return result; | 173 | return result; |
| 345 | 174 | ||
| 346 | std::string program_id{Common::StringFromFormat("%016" PRIX64, ncch_header.program_id)}; | 175 | ReadProgramId(ncch_program_id); |
| 176 | std::string program_id{Common::StringFromFormat("%016" PRIX64, ncch_program_id)}; | ||
| 347 | 177 | ||
| 348 | LOG_INFO(Loader, "Program ID: %s", program_id.c_str()); | 178 | LOG_INFO(Loader, "Program ID: %s", program_id.c_str()); |
| 349 | 179 | ||
| 180 | update_ncch.OpenFile(GetUpdateNCCHPath(ncch_program_id)); | ||
| 181 | result = update_ncch.Load(); | ||
| 182 | if (result == ResultStatus::Success) { | ||
| 183 | overlay_ncch = &update_ncch; | ||
| 184 | } | ||
| 185 | |||
| 350 | Core::Telemetry().AddField(Telemetry::FieldType::Session, "ProgramId", program_id); | 186 | Core::Telemetry().AddField(Telemetry::FieldType::Session, "ProgramId", program_id); |
| 351 | 187 | ||
| 188 | if (auto room_member = Network::GetRoomMember().lock()) { | ||
| 189 | Network::GameInfo game_info; | ||
| 190 | ReadTitle(game_info.name); | ||
| 191 | game_info.id = ncch_program_id; | ||
| 192 | room_member->SendGameInfo(game_info); | ||
| 193 | } | ||
| 194 | |||
| 352 | is_loaded = true; // Set state to loaded | 195 | is_loaded = true; // Set state to loaded |
| 353 | 196 | ||
| 354 | result = LoadExec(); // Load the executable into memory for booting | 197 | result = LoadExec(process); // Load the executable into memory for booting |
| 355 | if (ResultStatus::Success != result) | 198 | if (ResultStatus::Success != result) |
| 356 | return result; | 199 | return result; |
| 357 | 200 | ||
| 358 | Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(*this), | 201 | Service::FS::RegisterSelfNCCH(*this); |
| 359 | Service::FS::ArchiveIdCode::SelfNCCH); | ||
| 360 | 202 | ||
| 361 | ParseRegionLockoutInfo(); | 203 | ParseRegionLockoutInfo(); |
| 362 | 204 | ||
| @@ -364,61 +206,58 @@ ResultStatus AppLoader_NCCH::Load() { | |||
| 364 | } | 206 | } |
| 365 | 207 | ||
| 366 | ResultStatus AppLoader_NCCH::ReadCode(std::vector<u8>& buffer) { | 208 | ResultStatus AppLoader_NCCH::ReadCode(std::vector<u8>& buffer) { |
| 367 | return LoadSectionExeFS(".code", buffer); | 209 | return overlay_ncch->LoadSectionExeFS(".code", buffer); |
| 368 | } | 210 | } |
| 369 | 211 | ||
| 370 | ResultStatus AppLoader_NCCH::ReadIcon(std::vector<u8>& buffer) { | 212 | ResultStatus AppLoader_NCCH::ReadIcon(std::vector<u8>& buffer) { |
| 371 | return LoadSectionExeFS("icon", buffer); | 213 | return overlay_ncch->LoadSectionExeFS("icon", buffer); |
| 372 | } | 214 | } |
| 373 | 215 | ||
| 374 | ResultStatus AppLoader_NCCH::ReadBanner(std::vector<u8>& buffer) { | 216 | ResultStatus AppLoader_NCCH::ReadBanner(std::vector<u8>& buffer) { |
| 375 | return LoadSectionExeFS("banner", buffer); | 217 | return overlay_ncch->LoadSectionExeFS("banner", buffer); |
| 376 | } | 218 | } |
| 377 | 219 | ||
| 378 | ResultStatus AppLoader_NCCH::ReadLogo(std::vector<u8>& buffer) { | 220 | ResultStatus AppLoader_NCCH::ReadLogo(std::vector<u8>& buffer) { |
| 379 | return LoadSectionExeFS("logo", buffer); | 221 | return overlay_ncch->LoadSectionExeFS("logo", buffer); |
| 380 | } | 222 | } |
| 381 | 223 | ||
| 382 | ResultStatus AppLoader_NCCH::ReadProgramId(u64& out_program_id) { | 224 | ResultStatus AppLoader_NCCH::ReadProgramId(u64& out_program_id) { |
| 383 | if (!file.IsOpen()) | 225 | ResultStatus result = base_ncch.ReadProgramId(out_program_id); |
| 384 | return ResultStatus::Error; | ||
| 385 | |||
| 386 | ResultStatus result = LoadExeFS(); | ||
| 387 | if (result != ResultStatus::Success) | 226 | if (result != ResultStatus::Success) |
| 388 | return result; | 227 | return result; |
| 389 | 228 | ||
| 390 | out_program_id = ncch_header.program_id; | ||
| 391 | return ResultStatus::Success; | 229 | return ResultStatus::Success; |
| 392 | } | 230 | } |
| 393 | 231 | ||
| 394 | ResultStatus AppLoader_NCCH::ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, | 232 | ResultStatus AppLoader_NCCH::ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, |
| 395 | u64& size) { | 233 | u64& size) { |
| 396 | if (!file.IsOpen()) | 234 | return base_ncch.ReadRomFS(romfs_file, offset, size); |
| 397 | return ResultStatus::Error; | 235 | } |
| 398 | 236 | ||
| 399 | // Check if the NCCH has a RomFS... | 237 | ResultStatus AppLoader_NCCH::ReadUpdateRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, |
| 400 | if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) { | 238 | u64& offset, u64& size) { |
| 401 | u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000; | 239 | ResultStatus result = update_ncch.ReadRomFS(romfs_file, offset, size); |
| 402 | u32 romfs_size = (ncch_header.romfs_size * kBlockSize) - 0x1000; | ||
| 403 | 240 | ||
| 404 | LOG_DEBUG(Loader, "RomFS offset: 0x%08X", romfs_offset); | 241 | if (result != ResultStatus::Success) |
| 405 | LOG_DEBUG(Loader, "RomFS size: 0x%08X", romfs_size); | 242 | return base_ncch.ReadRomFS(romfs_file, offset, size); |
| 243 | } | ||
| 406 | 244 | ||
| 407 | if (file.GetSize() < romfs_offset + romfs_size) | 245 | ResultStatus AppLoader_NCCH::ReadTitle(std::string& title) { |
| 408 | return ResultStatus::Error; | 246 | std::vector<u8> data; |
| 247 | Loader::SMDH smdh; | ||
| 248 | ReadIcon(data); | ||
| 409 | 249 | ||
| 410 | // We reopen the file, to allow its position to be independent from file's | 250 | if (!Loader::IsValidSMDH(data)) { |
| 411 | romfs_file = std::make_shared<FileUtil::IOFile>(filepath, "rb"); | 251 | return ResultStatus::ErrorInvalidFormat; |
| 412 | if (!romfs_file->IsOpen()) | 252 | } |
| 413 | return ResultStatus::Error; | ||
| 414 | 253 | ||
| 415 | offset = romfs_offset; | 254 | memcpy(&smdh, data.data(), sizeof(Loader::SMDH)); |
| 416 | size = romfs_size; | ||
| 417 | 255 | ||
| 418 | return ResultStatus::Success; | 256 | const auto& short_title = smdh.GetShortTitle(SMDH::TitleLanguage::English); |
| 419 | } | 257 | auto title_end = std::find(short_title.begin(), short_title.end(), u'\0'); |
| 420 | LOG_DEBUG(Loader, "NCCH has no RomFS"); | 258 | title = Common::UTF16ToUTF8(std::u16string{short_title.begin(), title_end}); |
| 421 | return ResultStatus::ErrorNotUsed; | 259 | |
| 260 | return ResultStatus::Success; | ||
| 422 | } | 261 | } |
| 423 | 262 | ||
| 424 | } // namespace Loader | 263 | } // namespace Loader |
diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h index 0ebd47fd5..09230ae33 100644 --- a/src/core/loader/ncch.h +++ b/src/core/loader/ncch.h | |||
| @@ -5,155 +5,12 @@ | |||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <memory> | 7 | #include <memory> |
| 8 | #include "common/bit_field.h" | ||
| 9 | #include "common/common_types.h" | 8 | #include "common/common_types.h" |
| 10 | #include "common/swap.h" | 9 | #include "common/swap.h" |
| 10 | #include "core/file_sys/ncch_container.h" | ||
| 11 | #include "core/loader/loader.h" | 11 | #include "core/loader/loader.h" |
| 12 | 12 | ||
| 13 | //////////////////////////////////////////////////////////////////////////////////////////////////// | 13 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
| 14 | /// NCCH header (Note: "NCCH" appears to be a publicly unknown acronym) | ||
| 15 | |||
| 16 | struct NCCH_Header { | ||
| 17 | u8 signature[0x100]; | ||
| 18 | u32_le magic; | ||
| 19 | u32_le content_size; | ||
| 20 | u8 partition_id[8]; | ||
| 21 | u16_le maker_code; | ||
| 22 | u16_le version; | ||
| 23 | u8 reserved_0[4]; | ||
| 24 | u64_le program_id; | ||
| 25 | u8 reserved_1[0x10]; | ||
| 26 | u8 logo_region_hash[0x20]; | ||
| 27 | u8 product_code[0x10]; | ||
| 28 | u8 extended_header_hash[0x20]; | ||
| 29 | u32_le extended_header_size; | ||
| 30 | u8 reserved_2[4]; | ||
| 31 | u8 flags[8]; | ||
| 32 | u32_le plain_region_offset; | ||
| 33 | u32_le plain_region_size; | ||
| 34 | u32_le logo_region_offset; | ||
| 35 | u32_le logo_region_size; | ||
| 36 | u32_le exefs_offset; | ||
| 37 | u32_le exefs_size; | ||
| 38 | u32_le exefs_hash_region_size; | ||
| 39 | u8 reserved_3[4]; | ||
| 40 | u32_le romfs_offset; | ||
| 41 | u32_le romfs_size; | ||
| 42 | u32_le romfs_hash_region_size; | ||
| 43 | u8 reserved_4[4]; | ||
| 44 | u8 exefs_super_block_hash[0x20]; | ||
| 45 | u8 romfs_super_block_hash[0x20]; | ||
| 46 | }; | ||
| 47 | |||
| 48 | static_assert(sizeof(NCCH_Header) == 0x200, "NCCH header structure size is wrong"); | ||
| 49 | |||
| 50 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 51 | // ExeFS (executable file system) headers | ||
| 52 | |||
| 53 | struct ExeFs_SectionHeader { | ||
| 54 | char name[8]; | ||
| 55 | u32 offset; | ||
| 56 | u32 size; | ||
| 57 | }; | ||
| 58 | |||
| 59 | struct ExeFs_Header { | ||
| 60 | ExeFs_SectionHeader section[8]; | ||
| 61 | u8 reserved[0x80]; | ||
| 62 | u8 hashes[8][0x20]; | ||
| 63 | }; | ||
| 64 | |||
| 65 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 66 | // ExHeader (executable file system header) headers | ||
| 67 | |||
| 68 | struct ExHeader_SystemInfoFlags { | ||
| 69 | u8 reserved[5]; | ||
| 70 | u8 flag; | ||
| 71 | u8 remaster_version[2]; | ||
| 72 | }; | ||
| 73 | |||
| 74 | struct ExHeader_CodeSegmentInfo { | ||
| 75 | u32 address; | ||
| 76 | u32 num_max_pages; | ||
| 77 | u32 code_size; | ||
| 78 | }; | ||
| 79 | |||
| 80 | struct ExHeader_CodeSetInfo { | ||
| 81 | u8 name[8]; | ||
| 82 | ExHeader_SystemInfoFlags flags; | ||
| 83 | ExHeader_CodeSegmentInfo text; | ||
| 84 | u32 stack_size; | ||
| 85 | ExHeader_CodeSegmentInfo ro; | ||
| 86 | u8 reserved[4]; | ||
| 87 | ExHeader_CodeSegmentInfo data; | ||
| 88 | u32 bss_size; | ||
| 89 | }; | ||
| 90 | |||
| 91 | struct ExHeader_DependencyList { | ||
| 92 | u8 program_id[0x30][8]; | ||
| 93 | }; | ||
| 94 | |||
| 95 | struct ExHeader_SystemInfo { | ||
| 96 | u64 save_data_size; | ||
| 97 | u8 jump_id[8]; | ||
| 98 | u8 reserved_2[0x30]; | ||
| 99 | }; | ||
| 100 | |||
| 101 | struct ExHeader_StorageInfo { | ||
| 102 | u8 ext_save_data_id[8]; | ||
| 103 | u8 system_save_data_id[8]; | ||
| 104 | u8 reserved[8]; | ||
| 105 | u8 access_info[7]; | ||
| 106 | u8 other_attributes; | ||
| 107 | }; | ||
| 108 | |||
| 109 | struct ExHeader_ARM11_SystemLocalCaps { | ||
| 110 | u64_le program_id; | ||
| 111 | u32_le core_version; | ||
| 112 | u8 reserved_flags[2]; | ||
| 113 | union { | ||
| 114 | u8 flags0; | ||
| 115 | BitField<0, 2, u8> ideal_processor; | ||
| 116 | BitField<2, 2, u8> affinity_mask; | ||
| 117 | BitField<4, 4, u8> system_mode; | ||
| 118 | }; | ||
| 119 | u8 priority; | ||
| 120 | u8 resource_limit_descriptor[0x10][2]; | ||
| 121 | ExHeader_StorageInfo storage_info; | ||
| 122 | u8 service_access_control[0x20][8]; | ||
| 123 | u8 ex_service_access_control[0x2][8]; | ||
| 124 | u8 reserved[0xf]; | ||
| 125 | u8 resource_limit_category; | ||
| 126 | }; | ||
| 127 | |||
| 128 | struct ExHeader_ARM11_KernelCaps { | ||
| 129 | u32_le descriptors[28]; | ||
| 130 | u8 reserved[0x10]; | ||
| 131 | }; | ||
| 132 | |||
| 133 | struct ExHeader_ARM9_AccessControl { | ||
| 134 | u8 descriptors[15]; | ||
| 135 | u8 descversion; | ||
| 136 | }; | ||
| 137 | |||
| 138 | struct ExHeader_Header { | ||
| 139 | ExHeader_CodeSetInfo codeset_info; | ||
| 140 | ExHeader_DependencyList dependency_list; | ||
| 141 | ExHeader_SystemInfo system_info; | ||
| 142 | ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps; | ||
| 143 | ExHeader_ARM11_KernelCaps arm11_kernel_caps; | ||
| 144 | ExHeader_ARM9_AccessControl arm9_access_control; | ||
| 145 | struct { | ||
| 146 | u8 signature[0x100]; | ||
| 147 | u8 ncch_public_key_modulus[0x100]; | ||
| 148 | ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps; | ||
| 149 | ExHeader_ARM11_KernelCaps arm11_kernel_caps; | ||
| 150 | ExHeader_ARM9_AccessControl arm9_access_control; | ||
| 151 | } access_desc; | ||
| 152 | }; | ||
| 153 | |||
| 154 | static_assert(sizeof(ExHeader_Header) == 0x800, "ExHeader structure size is wrong"); | ||
| 155 | |||
| 156 | //////////////////////////////////////////////////////////////////////////////////////////////////// | ||
| 157 | // Loader namespace | 14 | // Loader namespace |
| 158 | 15 | ||
| 159 | namespace Loader { | 16 | namespace Loader { |
| @@ -162,7 +19,8 @@ namespace Loader { | |||
| 162 | class AppLoader_NCCH final : public AppLoader { | 19 | class AppLoader_NCCH final : public AppLoader { |
| 163 | public: | 20 | public: |
| 164 | AppLoader_NCCH(FileUtil::IOFile&& file, const std::string& filepath) | 21 | AppLoader_NCCH(FileUtil::IOFile&& file, const std::string& filepath) |
| 165 | : AppLoader(std::move(file)), filepath(filepath) {} | 22 | : AppLoader(std::move(file)), filepath(filepath), base_ncch(filepath), |
| 23 | overlay_ncch(&base_ncch) {} | ||
| 166 | 24 | ||
| 167 | /** | 25 | /** |
| 168 | * Returns the type of the file | 26 | * Returns the type of the file |
| @@ -175,7 +33,7 @@ public: | |||
| 175 | return IdentifyType(file); | 33 | return IdentifyType(file); |
| 176 | } | 34 | } |
| 177 | 35 | ||
| 178 | ResultStatus Load() override; | 36 | ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override; |
| 179 | 37 | ||
| 180 | /** | 38 | /** |
| 181 | * Loads the Exheader and returns the system mode for this application. | 39 | * Loads the Exheader and returns the system mode for this application. |
| @@ -191,63 +49,30 @@ public: | |||
| 191 | 49 | ||
| 192 | ResultStatus ReadLogo(std::vector<u8>& buffer) override; | 50 | ResultStatus ReadLogo(std::vector<u8>& buffer) override; |
| 193 | 51 | ||
| 194 | /** | ||
| 195 | * Get the program id of the application | ||
| 196 | * @param out_program_id Reference to store program id into | ||
| 197 | * @return ResultStatus result of function | ||
| 198 | */ | ||
| 199 | ResultStatus ReadProgramId(u64& out_program_id) override; | 52 | ResultStatus ReadProgramId(u64& out_program_id) override; |
| 200 | 53 | ||
| 201 | /** | ||
| 202 | * Get the RomFS of the application | ||
| 203 | * @param romfs_file Reference to buffer to store data | ||
| 204 | * @param offset Offset in the file to the RomFS | ||
| 205 | * @param size Size of the RomFS in bytes | ||
| 206 | * @return ResultStatus result of function | ||
| 207 | */ | ||
| 208 | ResultStatus ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, | 54 | ResultStatus ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, |
| 209 | u64& size) override; | 55 | u64& size) override; |
| 210 | 56 | ||
| 211 | private: | 57 | ResultStatus ReadUpdateRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, |
| 212 | /** | 58 | u64& size) override; |
| 213 | * Reads an application ExeFS section of an NCCH file into AppLoader (e.g. .code, .logo, etc.) | ||
| 214 | * @param name Name of section to read out of NCCH file | ||
| 215 | * @param buffer Vector to read data into | ||
| 216 | * @return ResultStatus result of function | ||
| 217 | */ | ||
| 218 | ResultStatus LoadSectionExeFS(const char* name, std::vector<u8>& buffer); | ||
| 219 | 59 | ||
| 220 | /** | 60 | ResultStatus ReadTitle(std::string& title) override; |
| 221 | * Loads .code section into memory for booting | ||
| 222 | * @return ResultStatus result of function | ||
| 223 | */ | ||
| 224 | ResultStatus LoadExec(); | ||
| 225 | 61 | ||
| 62 | private: | ||
| 226 | /** | 63 | /** |
| 227 | * Ensure ExeFS is loaded and ready for reading sections | 64 | * Loads .code section into memory for booting |
| 65 | * @param process The newly created process | ||
| 228 | * @return ResultStatus result of function | 66 | * @return ResultStatus result of function |
| 229 | */ | 67 | */ |
| 230 | ResultStatus LoadExeFS(); | 68 | ResultStatus LoadExec(Kernel::SharedPtr<Kernel::Process>& process); |
| 231 | 69 | ||
| 232 | /// Reads the region lockout info in the SMDH and send it to CFG service | 70 | /// Reads the region lockout info in the SMDH and send it to CFG service |
| 233 | void ParseRegionLockoutInfo(); | 71 | void ParseRegionLockoutInfo(); |
| 234 | 72 | ||
| 235 | bool is_exefs_loaded = false; | 73 | FileSys::NCCHContainer base_ncch; |
| 236 | bool is_compressed = false; | 74 | FileSys::NCCHContainer update_ncch; |
| 237 | 75 | FileSys::NCCHContainer* overlay_ncch; | |
| 238 | u32 entry_point = 0; | ||
| 239 | u32 code_size = 0; | ||
| 240 | u32 stack_size = 0; | ||
| 241 | u32 bss_size = 0; | ||
| 242 | u32 core_version = 0; | ||
| 243 | u8 priority = 0; | ||
| 244 | u8 resource_limit_category = 0; | ||
| 245 | u32 ncch_offset = 0; // Offset to NCCH header, can be 0 or after NCSD header | ||
| 246 | u32 exefs_offset = 0; | ||
| 247 | |||
| 248 | NCCH_Header ncch_header; | ||
| 249 | ExeFs_Header exefs_header; | ||
| 250 | ExHeader_Header exheader_header; | ||
| 251 | 76 | ||
| 252 | std::string filepath; | 77 | std::string filepath; |
| 253 | }; | 78 | }; |
diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp index 753e7e08b..24c2c55a9 100644 --- a/src/core/loader/nro.cpp +++ b/src/core/loader/nro.cpp | |||
| @@ -132,7 +132,7 @@ bool AppLoader_NRO::LoadNro(const std::string& path, VAddr load_base) { | |||
| 132 | return true; | 132 | return true; |
| 133 | } | 133 | } |
| 134 | 134 | ||
| 135 | ResultStatus AppLoader_NRO::Load() { | 135 | ResultStatus AppLoader_NRO::Load(Kernel::SharedPtr<Kernel::Process>& process) { |
| 136 | if (is_loaded) { | 136 | if (is_loaded) { |
| 137 | return ResultStatus::ErrorAlreadyLoaded; | 137 | return ResultStatus::ErrorAlreadyLoaded; |
| 138 | } | 138 | } |
| @@ -142,16 +142,16 @@ ResultStatus AppLoader_NRO::Load() { | |||
| 142 | 142 | ||
| 143 | // Load and relocate "main" and "sdk" NSO | 143 | // Load and relocate "main" and "sdk" NSO |
| 144 | static constexpr VAddr base_addr{Memory::PROCESS_IMAGE_VADDR}; | 144 | static constexpr VAddr base_addr{Memory::PROCESS_IMAGE_VADDR}; |
| 145 | Kernel::g_current_process = Kernel::Process::Create("main"); | 145 | process = Kernel::Process::Create("main"); |
| 146 | if (!LoadNro(filepath, base_addr)) { | 146 | if (!LoadNro(filepath, base_addr)) { |
| 147 | return ResultStatus::ErrorInvalidFormat; | 147 | return ResultStatus::ErrorInvalidFormat; |
| 148 | } | 148 | } |
| 149 | 149 | ||
| 150 | Kernel::g_current_process->svc_access_mask.set(); | 150 | process->svc_access_mask.set(); |
| 151 | Kernel::g_current_process->address_mappings = default_address_mappings; | 151 | process->address_mappings = default_address_mappings; |
| 152 | Kernel::g_current_process->resource_limit = | 152 | process->resource_limit = |
| 153 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | 153 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); |
| 154 | Kernel::g_current_process->Run(base_addr, 48, Kernel::DEFAULT_STACK_SIZE); | 154 | process->Run(base_addr, 48, Kernel::DEFAULT_STACK_SIZE); |
| 155 | 155 | ||
| 156 | ResolveImports(); | 156 | ResolveImports(); |
| 157 | 157 | ||
diff --git a/src/core/loader/nro.h b/src/core/loader/nro.h index c3c7622fd..c85768c5b 100644 --- a/src/core/loader/nro.h +++ b/src/core/loader/nro.h | |||
| @@ -31,7 +31,7 @@ public: | |||
| 31 | return IdentifyType(file); | 31 | return IdentifyType(file); |
| 32 | } | 32 | } |
| 33 | 33 | ||
| 34 | ResultStatus Load() override; | 34 | ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override; |
| 35 | 35 | ||
| 36 | private: | 36 | private: |
| 37 | bool LoadNro(const std::string& path, VAddr load_base); | 37 | bool LoadNro(const std::string& path, VAddr load_base); |
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp index ac8d12ecc..b1b57d0c0 100644 --- a/src/core/loader/nso.cpp +++ b/src/core/loader/nso.cpp | |||
| @@ -144,7 +144,7 @@ VAddr AppLoader_NSO::LoadNso(const std::string& path, VAddr load_base, bool relo | |||
| 144 | return load_base + image_size; | 144 | return load_base + image_size; |
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | ResultStatus AppLoader_NSO::Load() { | 147 | ResultStatus AppLoader_NSO::Load(Kernel::SharedPtr<Kernel::Process>& process) { |
| 148 | if (is_loaded) { | 148 | if (is_loaded) { |
| 149 | return ResultStatus::ErrorAlreadyLoaded; | 149 | return ResultStatus::ErrorAlreadyLoaded; |
| 150 | } | 150 | } |
| @@ -154,7 +154,7 @@ ResultStatus AppLoader_NSO::Load() { | |||
| 154 | 154 | ||
| 155 | // Load and relocate "rtld" NSO | 155 | // Load and relocate "rtld" NSO |
| 156 | static constexpr VAddr base_addr{Memory::PROCESS_IMAGE_VADDR}; | 156 | static constexpr VAddr base_addr{Memory::PROCESS_IMAGE_VADDR}; |
| 157 | Kernel::g_current_process = Kernel::Process::Create("main"); | 157 | process = Kernel::Process::Create("main"); |
| 158 | VAddr next_base_addr{LoadNso(filepath, base_addr)}; | 158 | VAddr next_base_addr{LoadNso(filepath, base_addr)}; |
| 159 | if (!next_base_addr) { | 159 | if (!next_base_addr) { |
| 160 | return ResultStatus::ErrorInvalidFormat; | 160 | return ResultStatus::ErrorInvalidFormat; |
| @@ -170,11 +170,11 @@ ResultStatus AppLoader_NSO::Load() { | |||
| 170 | } | 170 | } |
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | Kernel::g_current_process->svc_access_mask.set(); | 173 | process->svc_access_mask.set(); |
| 174 | Kernel::g_current_process->address_mappings = default_address_mappings; | 174 | process->address_mappings = default_address_mappings; |
| 175 | Kernel::g_current_process->resource_limit = | 175 | process->resource_limit = |
| 176 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | 176 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); |
| 177 | Kernel::g_current_process->Run(base_addr, 48, Kernel::DEFAULT_STACK_SIZE); | 177 | process->Run(base_addr, 48, Kernel::DEFAULT_STACK_SIZE); |
| 178 | 178 | ||
| 179 | ResolveImports(); | 179 | ResolveImports(); |
| 180 | 180 | ||
diff --git a/src/core/loader/nso.h b/src/core/loader/nso.h index c29803d81..b6b86c209 100644 --- a/src/core/loader/nso.h +++ b/src/core/loader/nso.h | |||
| @@ -32,7 +32,7 @@ public: | |||
| 32 | return IdentifyType(file); | 32 | return IdentifyType(file); |
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | ResultStatus Load() override; | 35 | ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override; |
| 36 | 36 | ||
| 37 | private: | 37 | private: |
| 38 | VAddr LoadNso(const std::string& path, VAddr load_base, bool relocate = false); | 38 | VAddr LoadNso(const std::string& path, VAddr load_base, bool relocate = false); |
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index ebe16b030..462d68386 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp | |||
| @@ -4,95 +4,53 @@ | |||
| 4 | 4 | ||
| 5 | #include <array> | 5 | #include <array> |
| 6 | #include <cstring> | 6 | #include <cstring> |
| 7 | #include "audio_core/audio_core.h" | ||
| 7 | #include "common/assert.h" | 8 | #include "common/assert.h" |
| 8 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 9 | #include "common/logging/log.h" | 10 | #include "common/logging/log.h" |
| 10 | #include "common/swap.h" | 11 | #include "common/swap.h" |
| 12 | #include "core/arm/arm_interface.h" | ||
| 13 | #include "core/core.h" | ||
| 14 | #include "core/hle/kernel/memory.h" | ||
| 11 | #include "core/hle/kernel/process.h" | 15 | #include "core/hle/kernel/process.h" |
| 16 | #include "core/hle/lock.h" | ||
| 12 | #include "core/memory.h" | 17 | #include "core/memory.h" |
| 13 | #include "core/memory_setup.h" | 18 | #include "core/memory_setup.h" |
| 14 | #include "core/mmio.h" | ||
| 15 | #include "video_core/renderer_base.h" | 19 | #include "video_core/renderer_base.h" |
| 16 | #include "video_core/video_core.h" | 20 | #include "video_core/video_core.h" |
| 17 | 21 | ||
| 18 | namespace Memory { | 22 | namespace Memory { |
| 19 | 23 | ||
| 20 | enum class PageType { | 24 | static std::array<u8, Memory::VRAM_SIZE> vram; |
| 21 | /// Page is unmapped and should cause an access error. | 25 | static std::array<u8, Memory::N3DS_EXTRA_RAM_SIZE> n3ds_extra_ram; |
| 22 | Unmapped, | ||
| 23 | /// Page is mapped to regular memory. This is the only type you can get pointers to. | ||
| 24 | Memory, | ||
| 25 | /// Page is mapped to regular memory, but also needs to check for rasterizer cache flushing and | ||
| 26 | /// invalidation | ||
| 27 | RasterizerCachedMemory, | ||
| 28 | /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions. | ||
| 29 | Special, | ||
| 30 | /// Page is mapped to a I/O region, but also needs to check for rasterizer cache flushing and | ||
| 31 | /// invalidation | ||
| 32 | RasterizerCachedSpecial, | ||
| 33 | }; | ||
| 34 | |||
| 35 | struct SpecialRegion { | ||
| 36 | VAddr base; | ||
| 37 | u64 size; | ||
| 38 | MMIORegionPointer handler; | ||
| 39 | }; | ||
| 40 | 26 | ||
| 41 | /** | 27 | static PageTable* current_page_table = nullptr; |
| 42 | * A (reasonably) fast way of allowing switchable and remappable process address spaces. It loosely | 28 | |
| 43 | * mimics the way a real CPU page table works, but instead is optimized for minimal decoding and | 29 | void SetCurrentPageTable(PageTable* page_table) { |
| 44 | * fetching requirements when accessing. In the usual case of an access to regular memory, it only | 30 | current_page_table = page_table; |
| 45 | * requires an indexed fetch and a check for NULL. | 31 | if (Core::System::GetInstance().IsPoweredOn()) { |
| 46 | */ | 32 | Core::CPU().PageTableChanged(); |
| 47 | struct PageTable { | 33 | } |
| 48 | /** | 34 | } |
| 49 | * Array of memory pointers backing each page. An entry can only be non-null if the | 35 | |
| 50 | * corresponding entry in the `attributes` array is of type `Memory`. | 36 | PageTable* GetCurrentPageTable() { |
| 51 | */ | 37 | return current_page_table; |
| 52 | std::map<u64, u8*> pointers; | 38 | } |
| 53 | 39 | ||
| 54 | /** | 40 | static void MapPages(PageTable& page_table, VAddr base, u32 size, u8* memory, PageType type) { |
| 55 | * Contains MMIO handlers that back memory regions whose entries in the `attribute` array is of | ||
| 56 | * type `Special`. | ||
| 57 | */ | ||
| 58 | std::vector<SpecialRegion> special_regions; | ||
| 59 | |||
| 60 | /** | ||
| 61 | * Array of fine grained page attributes. If it is set to any value other than `Memory`, then | ||
| 62 | * the corresponding entry in `pointers` MUST be set to null. | ||
| 63 | */ | ||
| 64 | std::map<u64, PageType> attributes; | ||
| 65 | |||
| 66 | /** | ||
| 67 | * Indicates the number of externally cached resources touching a page that should be | ||
| 68 | * flushed before the memory is accessed | ||
| 69 | */ | ||
| 70 | std::map<u64, u8> cached_res_count; | ||
| 71 | }; | ||
| 72 | |||
| 73 | /// Singular page table used for the singleton process | ||
| 74 | static PageTable main_page_table; | ||
| 75 | /// Currently active page table | ||
| 76 | static PageTable* current_page_table = &main_page_table; | ||
| 77 | |||
| 78 | //std::array<u8*, PAGE_TABLE_NUM_ENTRIES>* GetCurrentPageTablePointers() { | ||
| 79 | // return ¤t_page_table->pointers; | ||
| 80 | //} | ||
| 81 | |||
| 82 | static void MapPages(u64 base, u64 size, u8* memory, PageType type) { | ||
| 83 | LOG_DEBUG(HW_Memory, "Mapping %p onto %08X-%08X", memory, base * PAGE_SIZE, | 41 | LOG_DEBUG(HW_Memory, "Mapping %p onto %08X-%08X", memory, base * PAGE_SIZE, |
| 84 | (base + size) * PAGE_SIZE); | 42 | (base + size) * PAGE_SIZE); |
| 85 | 43 | ||
| 86 | RasterizerFlushVirtualRegion(base << PAGE_BITS, size * PAGE_SIZE, | 44 | RasterizerFlushVirtualRegion(base << PAGE_BITS, size * PAGE_SIZE, |
| 87 | FlushMode::FlushAndInvalidate); | 45 | FlushMode::FlushAndInvalidate); |
| 88 | 46 | ||
| 89 | u64 end = base + size; | 47 | VAddr end = base + size; |
| 90 | while (base != end) { | 48 | while (base != end) { |
| 91 | ASSERT_MSG(base < PAGE_TABLE_NUM_ENTRIES, "out of range mapping at %08X", base); | 49 | ASSERT_MSG(base < PAGE_TABLE_NUM_ENTRIES, "out of range mapping at %08X", base); |
| 92 | 50 | ||
| 93 | current_page_table->attributes[base] = type; | 51 | page_table.attributes[base] = type; |
| 94 | current_page_table->pointers[base] = memory; | 52 | page_table.pointers[base] = memory; |
| 95 | current_page_table->cached_res_count[base] = 0; | 53 | page_table.cached_res_count[base] = 0; |
| 96 | 54 | ||
| 97 | base += 1; | 55 | base += 1; |
| 98 | if (memory != nullptr) | 56 | if (memory != nullptr) |
| @@ -100,40 +58,34 @@ static void MapPages(u64 base, u64 size, u8* memory, PageType type) { | |||
| 100 | } | 58 | } |
| 101 | } | 59 | } |
| 102 | 60 | ||
| 103 | void InitMemoryMap() { | 61 | void MapMemoryRegion(PageTable& page_table, VAddr base, u32 size, u8* target) { |
| 104 | //main_page_table.pointers.fill(nullptr); | ||
| 105 | //main_page_table.attributes.fill(PageType::Unmapped); | ||
| 106 | //main_page_table.cached_res_count.fill(0); | ||
| 107 | } | ||
| 108 | |||
| 109 | void MapMemoryRegion(VAddr base, u64 size, u8* target) { | ||
| 110 | ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); | 62 | ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); |
| 111 | ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); | 63 | ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); |
| 112 | MapPages(base / PAGE_SIZE, size / PAGE_SIZE, target, PageType::Memory); | 64 | MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, target, PageType::Memory); |
| 113 | } | 65 | } |
| 114 | 66 | ||
| 115 | void MapIoRegion(VAddr base, u64 size, MMIORegionPointer mmio_handler) { | 67 | void MapIoRegion(PageTable& page_table, VAddr base, u32 size, MMIORegionPointer mmio_handler) { |
| 116 | ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); | 68 | ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); |
| 117 | ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); | 69 | ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); |
| 118 | MapPages(base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Special); | 70 | MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Special); |
| 119 | 71 | ||
| 120 | current_page_table->special_regions.emplace_back(SpecialRegion{base, size, mmio_handler}); | 72 | page_table.special_regions.emplace_back(SpecialRegion{base, size, mmio_handler}); |
| 121 | } | 73 | } |
| 122 | 74 | ||
| 123 | void UnmapRegion(VAddr base, u64 size) { | 75 | void UnmapRegion(PageTable& page_table, VAddr base, u32 size) { |
| 124 | ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); | 76 | ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); |
| 125 | ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); | 77 | ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); |
| 126 | MapPages(base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Unmapped); | 78 | MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Unmapped); |
| 127 | } | 79 | } |
| 128 | 80 | ||
| 129 | /** | 81 | /** |
| 130 | * Gets a pointer to the exact memory at the virtual address (i.e. not page aligned) | 82 | * Gets a pointer to the exact memory at the virtual address (i.e. not page aligned) |
| 131 | * using a VMA from the current process | 83 | * using a VMA from the current process |
| 132 | */ | 84 | */ |
| 133 | static u8* GetPointerFromVMA(VAddr vaddr) { | 85 | static u8* GetPointerFromVMA(const Kernel::Process& process, VAddr vaddr) { |
| 134 | u8* direct_pointer = nullptr; | 86 | u8* direct_pointer = nullptr; |
| 135 | 87 | ||
| 136 | auto& vm_manager = Kernel::g_current_process->vm_manager; | 88 | auto& vm_manager = process.vm_manager; |
| 137 | 89 | ||
| 138 | auto it = vm_manager.FindVMA(vaddr); | 90 | auto it = vm_manager.FindVMA(vaddr); |
| 139 | ASSERT(it != vm_manager.vma_map.end()); | 91 | ASSERT(it != vm_manager.vma_map.end()); |
| @@ -156,10 +108,18 @@ static u8* GetPointerFromVMA(VAddr vaddr) { | |||
| 156 | } | 108 | } |
| 157 | 109 | ||
| 158 | /** | 110 | /** |
| 111 | * Gets a pointer to the exact memory at the virtual address (i.e. not page aligned) | ||
| 112 | * using a VMA from the current process. | ||
| 113 | */ | ||
| 114 | static u8* GetPointerFromVMA(VAddr vaddr) { | ||
| 115 | return GetPointerFromVMA(*Kernel::g_current_process, vaddr); | ||
| 116 | } | ||
| 117 | |||
| 118 | /** | ||
| 159 | * This function should only be called for virtual addreses with attribute `PageType::Special`. | 119 | * This function should only be called for virtual addreses with attribute `PageType::Special`. |
| 160 | */ | 120 | */ |
| 161 | static MMIORegionPointer GetMMIOHandler(VAddr vaddr) { | 121 | static MMIORegionPointer GetMMIOHandler(const PageTable& page_table, VAddr vaddr) { |
| 162 | for (const auto& region : current_page_table->special_regions) { | 122 | for (const auto& region : page_table.special_regions) { |
| 163 | if (vaddr >= region.base && vaddr < (region.base + region.size)) { | 123 | if (vaddr >= region.base && vaddr < (region.base + region.size)) { |
| 164 | return region.handler; | 124 | return region.handler; |
| 165 | } | 125 | } |
| @@ -168,6 +128,11 @@ static MMIORegionPointer GetMMIOHandler(VAddr vaddr) { | |||
| 168 | return nullptr; // Should never happen | 128 | return nullptr; // Should never happen |
| 169 | } | 129 | } |
| 170 | 130 | ||
| 131 | static MMIORegionPointer GetMMIOHandler(VAddr vaddr) { | ||
| 132 | const PageTable& page_table = Kernel::g_current_process->vm_manager.page_table; | ||
| 133 | return GetMMIOHandler(page_table, vaddr); | ||
| 134 | } | ||
| 135 | |||
| 171 | template <typename T> | 136 | template <typename T> |
| 172 | T ReadMMIO(MMIORegionPointer mmio_handler, VAddr addr); | 137 | T ReadMMIO(MMIORegionPointer mmio_handler, VAddr addr); |
| 173 | 138 | ||
| @@ -181,10 +146,13 @@ T Read(const VAddr vaddr) { | |||
| 181 | return value; | 146 | return value; |
| 182 | } | 147 | } |
| 183 | 148 | ||
| 149 | // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state | ||
| 150 | std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock); | ||
| 151 | |||
| 184 | PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; | 152 | PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; |
| 185 | switch (type) { | 153 | switch (type) { |
| 186 | case PageType::Unmapped: | 154 | case PageType::Unmapped: |
| 187 | LOG_ERROR(HW_Memory, "unmapped Read%lu @ 0x%llx", sizeof(T) * 8, vaddr); | 155 | LOG_ERROR(HW_Memory, "unmapped Read%lu @ 0x%08X", sizeof(T) * 8, vaddr); |
| 188 | return 0; | 156 | return 0; |
| 189 | case PageType::Memory: | 157 | case PageType::Memory: |
| 190 | ASSERT_MSG(false, "Mapped memory page without a pointer @ %08X", vaddr); | 158 | ASSERT_MSG(false, "Mapped memory page without a pointer @ %08X", vaddr); |
| @@ -219,10 +187,13 @@ void Write(const VAddr vaddr, const T data) { | |||
| 219 | return; | 187 | return; |
| 220 | } | 188 | } |
| 221 | 189 | ||
| 190 | // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state | ||
| 191 | std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock); | ||
| 192 | |||
| 222 | PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; | 193 | PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; |
| 223 | switch (type) { | 194 | switch (type) { |
| 224 | case PageType::Unmapped: | 195 | case PageType::Unmapped: |
| 225 | LOG_ERROR(HW_Memory, "unmapped Write%lu 0x%llx @ 0x%llx", sizeof(data) * 8, (u64)data, | 196 | LOG_ERROR(HW_Memory, "unmapped Write%lu 0x%08X @ 0x%08X", sizeof(data) * 8, (u32)data, |
| 226 | vaddr); | 197 | vaddr); |
| 227 | return; | 198 | return; |
| 228 | case PageType::Memory: | 199 | case PageType::Memory: |
| @@ -246,18 +217,20 @@ void Write(const VAddr vaddr, const T data) { | |||
| 246 | } | 217 | } |
| 247 | } | 218 | } |
| 248 | 219 | ||
| 249 | bool IsValidVirtualAddress(const VAddr vaddr) { | 220 | bool IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr) { |
| 250 | const u8* page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS]; | 221 | auto& page_table = process.vm_manager.page_table; |
| 222 | |||
| 223 | const u8* page_pointer = page_table.pointers[vaddr >> PAGE_BITS]; | ||
| 251 | if (page_pointer) | 224 | if (page_pointer) |
| 252 | return true; | 225 | return true; |
| 253 | 226 | ||
| 254 | if (current_page_table->attributes[vaddr >> PAGE_BITS] == PageType::RasterizerCachedMemory) | 227 | if (page_table.attributes[vaddr >> PAGE_BITS] == PageType::RasterizerCachedMemory) |
| 255 | return true; | 228 | return true; |
| 256 | 229 | ||
| 257 | if (current_page_table->attributes[vaddr >> PAGE_BITS] != PageType::Special) | 230 | if (page_table.attributes[vaddr >> PAGE_BITS] != PageType::Special) |
| 258 | return false; | 231 | return false; |
| 259 | 232 | ||
| 260 | MMIORegionPointer mmio_region = GetMMIOHandler(vaddr); | 233 | MMIORegionPointer mmio_region = GetMMIOHandler(page_table, vaddr); |
| 261 | if (mmio_region) { | 234 | if (mmio_region) { |
| 262 | return mmio_region->IsValidAddress(vaddr); | 235 | return mmio_region->IsValidAddress(vaddr); |
| 263 | } | 236 | } |
| @@ -265,9 +238,12 @@ bool IsValidVirtualAddress(const VAddr vaddr) { | |||
| 265 | return false; | 238 | return false; |
| 266 | } | 239 | } |
| 267 | 240 | ||
| 241 | bool IsValidVirtualAddress(const VAddr vaddr) { | ||
| 242 | return IsValidVirtualAddress(*Kernel::g_current_process, vaddr); | ||
| 243 | } | ||
| 244 | |||
| 268 | bool IsValidPhysicalAddress(const PAddr paddr) { | 245 | bool IsValidPhysicalAddress(const PAddr paddr) { |
| 269 | boost::optional<VAddr> vaddr = PhysicalToVirtualAddress(paddr); | 246 | return GetPhysicalPointer(paddr) != nullptr; |
| 270 | return vaddr && IsValidVirtualAddress(*vaddr); | ||
| 271 | } | 247 | } |
| 272 | 248 | ||
| 273 | u8* GetPointer(const VAddr vaddr) { | 249 | u8* GetPointer(const VAddr vaddr) { |
| @@ -280,7 +256,7 @@ u8* GetPointer(const VAddr vaddr) { | |||
| 280 | return GetPointerFromVMA(vaddr); | 256 | return GetPointerFromVMA(vaddr); |
| 281 | } | 257 | } |
| 282 | 258 | ||
| 283 | LOG_ERROR(HW_Memory, "unknown GetPointer @ 0x%llx", vaddr); | 259 | LOG_ERROR(HW_Memory, "unknown GetPointer @ 0x%08x", vaddr); |
| 284 | return nullptr; | 260 | return nullptr; |
| 285 | } | 261 | } |
| 286 | 262 | ||
| @@ -299,12 +275,66 @@ std::string ReadCString(VAddr vaddr, std::size_t max_length) { | |||
| 299 | } | 275 | } |
| 300 | 276 | ||
| 301 | u8* GetPhysicalPointer(PAddr address) { | 277 | u8* GetPhysicalPointer(PAddr address) { |
| 302 | // TODO(Subv): This call should not go through the application's memory mapping. | 278 | struct MemoryArea { |
| 303 | boost::optional<VAddr> vaddr = PhysicalToVirtualAddress(address); | 279 | PAddr paddr_base; |
| 304 | return vaddr ? GetPointer(*vaddr) : nullptr; | 280 | u32 size; |
| 281 | }; | ||
| 282 | |||
| 283 | static constexpr MemoryArea memory_areas[] = { | ||
| 284 | {VRAM_PADDR, VRAM_SIZE}, | ||
| 285 | {IO_AREA_PADDR, IO_AREA_SIZE}, | ||
| 286 | {DSP_RAM_PADDR, DSP_RAM_SIZE}, | ||
| 287 | {FCRAM_PADDR, FCRAM_N3DS_SIZE}, | ||
| 288 | {N3DS_EXTRA_RAM_PADDR, N3DS_EXTRA_RAM_SIZE}, | ||
| 289 | }; | ||
| 290 | |||
| 291 | const auto area = | ||
| 292 | std::find_if(std::begin(memory_areas), std::end(memory_areas), [&](const auto& area) { | ||
| 293 | return address >= area.paddr_base && address < area.paddr_base + area.size; | ||
| 294 | }); | ||
| 295 | |||
| 296 | if (area == std::end(memory_areas)) { | ||
| 297 | LOG_ERROR(HW_Memory, "unknown GetPhysicalPointer @ 0x%08X", address); | ||
| 298 | return nullptr; | ||
| 299 | } | ||
| 300 | |||
| 301 | if (area->paddr_base == IO_AREA_PADDR) { | ||
| 302 | LOG_ERROR(HW_Memory, "MMIO mappings are not supported yet. phys_addr=0x%08X", address); | ||
| 303 | return nullptr; | ||
| 304 | } | ||
| 305 | |||
| 306 | u64 offset_into_region = address - area->paddr_base; | ||
| 307 | |||
| 308 | u8* target_pointer = nullptr; | ||
| 309 | switch (area->paddr_base) { | ||
| 310 | case VRAM_PADDR: | ||
| 311 | target_pointer = vram.data() + offset_into_region; | ||
| 312 | break; | ||
| 313 | case DSP_RAM_PADDR: | ||
| 314 | target_pointer = AudioCore::GetDspMemory().data() + offset_into_region; | ||
| 315 | break; | ||
| 316 | case FCRAM_PADDR: | ||
| 317 | for (const auto& region : Kernel::memory_regions) { | ||
| 318 | if (offset_into_region >= region.base && | ||
| 319 | offset_into_region < region.base + region.size) { | ||
| 320 | target_pointer = | ||
| 321 | region.linear_heap_memory->data() + offset_into_region - region.base; | ||
| 322 | break; | ||
| 323 | } | ||
| 324 | } | ||
| 325 | ASSERT_MSG(target_pointer != nullptr, "Invalid FCRAM address"); | ||
| 326 | break; | ||
| 327 | case N3DS_EXTRA_RAM_PADDR: | ||
| 328 | target_pointer = n3ds_extra_ram.data() + offset_into_region; | ||
| 329 | break; | ||
| 330 | default: | ||
| 331 | UNREACHABLE(); | ||
| 332 | } | ||
| 333 | |||
| 334 | return target_pointer; | ||
| 305 | } | 335 | } |
| 306 | 336 | ||
| 307 | void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) { | 337 | void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta) { |
| 308 | if (start == 0) { | 338 | if (start == 0) { |
| 309 | return; | 339 | return; |
| 310 | } | 340 | } |
| @@ -314,8 +344,15 @@ void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) { | |||
| 314 | 344 | ||
| 315 | for (unsigned i = 0; i < num_pages; ++i, paddr += PAGE_SIZE) { | 345 | for (unsigned i = 0; i < num_pages; ++i, paddr += PAGE_SIZE) { |
| 316 | boost::optional<VAddr> maybe_vaddr = PhysicalToVirtualAddress(paddr); | 346 | boost::optional<VAddr> maybe_vaddr = PhysicalToVirtualAddress(paddr); |
| 317 | if (!maybe_vaddr) | 347 | // While the physical <-> virtual mapping is 1:1 for the regions supported by the cache, |
| 348 | // some games (like Pokemon Super Mystery Dungeon) will try to use textures that go beyond | ||
| 349 | // the end address of VRAM, causing the Virtual->Physical translation to fail when flushing | ||
| 350 | // parts of the texture. | ||
| 351 | if (!maybe_vaddr) { | ||
| 352 | LOG_ERROR(HW_Memory, | ||
| 353 | "Trying to flush a cached region to an invalid physical address %08X", paddr); | ||
| 318 | continue; | 354 | continue; |
| 355 | } | ||
| 319 | VAddr vaddr = *maybe_vaddr; | 356 | VAddr vaddr = *maybe_vaddr; |
| 320 | 357 | ||
| 321 | u8& res_count = current_page_table->cached_res_count[vaddr >> PAGE_BITS]; | 358 | u8& res_count = current_page_table->cached_res_count[vaddr >> PAGE_BITS]; |
| @@ -327,6 +364,10 @@ void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) { | |||
| 327 | if (res_count == 0) { | 364 | if (res_count == 0) { |
| 328 | PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS]; | 365 | PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS]; |
| 329 | switch (page_type) { | 366 | switch (page_type) { |
| 367 | case PageType::Unmapped: | ||
| 368 | // It is not necessary for a process to have this region mapped into its address | ||
| 369 | // space, for example, a system module need not have a VRAM mapping. | ||
| 370 | break; | ||
| 330 | case PageType::Memory: | 371 | case PageType::Memory: |
| 331 | page_type = PageType::RasterizerCachedMemory; | 372 | page_type = PageType::RasterizerCachedMemory; |
| 332 | current_page_table->pointers[vaddr >> PAGE_BITS] = nullptr; | 373 | current_page_table->pointers[vaddr >> PAGE_BITS] = nullptr; |
| @@ -345,6 +386,10 @@ void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) { | |||
| 345 | if (res_count == 0) { | 386 | if (res_count == 0) { |
| 346 | PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS]; | 387 | PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS]; |
| 347 | switch (page_type) { | 388 | switch (page_type) { |
| 389 | case PageType::Unmapped: | ||
| 390 | // It is not necessary for a process to have this region mapped into its address | ||
| 391 | // space, for example, a system module need not have a VRAM mapping. | ||
| 392 | break; | ||
| 348 | case PageType::RasterizerCachedMemory: { | 393 | case PageType::RasterizerCachedMemory: { |
| 349 | u8* pointer = GetPointerFromVMA(vaddr & ~PAGE_MASK); | 394 | u8* pointer = GetPointerFromVMA(vaddr & ~PAGE_MASK); |
| 350 | if (pointer == nullptr) { | 395 | if (pointer == nullptr) { |
| @@ -368,13 +413,13 @@ void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) { | |||
| 368 | } | 413 | } |
| 369 | } | 414 | } |
| 370 | 415 | ||
| 371 | void RasterizerFlushRegion(PAddr start, u64 size) { | 416 | void RasterizerFlushRegion(PAddr start, u32 size) { |
| 372 | if (VideoCore::g_renderer != nullptr) { | 417 | if (VideoCore::g_renderer != nullptr) { |
| 373 | VideoCore::g_renderer->Rasterizer()->FlushRegion(start, size); | 418 | VideoCore::g_renderer->Rasterizer()->FlushRegion(start, size); |
| 374 | } | 419 | } |
| 375 | } | 420 | } |
| 376 | 421 | ||
| 377 | void RasterizerFlushAndInvalidateRegion(PAddr start, u64 size) { | 422 | void RasterizerFlushAndInvalidateRegion(PAddr start, u32 size) { |
| 378 | // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be | 423 | // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be |
| 379 | // null here | 424 | // null here |
| 380 | if (VideoCore::g_renderer != nullptr) { | 425 | if (VideoCore::g_renderer != nullptr) { |
| @@ -382,7 +427,7 @@ void RasterizerFlushAndInvalidateRegion(PAddr start, u64 size) { | |||
| 382 | } | 427 | } |
| 383 | } | 428 | } |
| 384 | 429 | ||
| 385 | void RasterizerFlushVirtualRegion(VAddr start, u64 size, FlushMode mode) { | 430 | void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode) { |
| 386 | // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be | 431 | // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be |
| 387 | // null here | 432 | // null here |
| 388 | if (VideoCore::g_renderer != nullptr) { | 433 | if (VideoCore::g_renderer != nullptr) { |
| @@ -398,7 +443,7 @@ void RasterizerFlushVirtualRegion(VAddr start, u64 size, FlushMode mode) { | |||
| 398 | VAddr overlap_end = std::min(end, region_end); | 443 | VAddr overlap_end = std::min(end, region_end); |
| 399 | 444 | ||
| 400 | PAddr physical_start = TryVirtualToPhysicalAddress(overlap_start).value(); | 445 | PAddr physical_start = TryVirtualToPhysicalAddress(overlap_start).value(); |
| 401 | u64 overlap_size = overlap_end - overlap_start; | 446 | u32 overlap_size = static_cast<u32>(overlap_end - overlap_start); |
| 402 | 447 | ||
| 403 | auto* rasterizer = VideoCore::g_renderer->Rasterizer(); | 448 | auto* rasterizer = VideoCore::g_renderer->Rasterizer(); |
| 404 | switch (mode) { | 449 | switch (mode) { |
| @@ -433,44 +478,50 @@ u64 Read64(const VAddr addr) { | |||
| 433 | return Read<u64_le>(addr); | 478 | return Read<u64_le>(addr); |
| 434 | } | 479 | } |
| 435 | 480 | ||
| 436 | void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { | 481 | void ReadBlock(const Kernel::Process& process, const VAddr src_addr, void* dest_buffer, |
| 482 | const size_t size) { | ||
| 483 | auto& page_table = process.vm_manager.page_table; | ||
| 484 | |||
| 437 | size_t remaining_size = size; | 485 | size_t remaining_size = size; |
| 438 | size_t page_index = src_addr >> PAGE_BITS; | 486 | size_t page_index = src_addr >> PAGE_BITS; |
| 439 | size_t page_offset = src_addr & PAGE_MASK; | 487 | size_t page_offset = src_addr & PAGE_MASK; |
| 440 | 488 | ||
| 441 | while (remaining_size > 0) { | 489 | while (remaining_size > 0) { |
| 442 | const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); | 490 | const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); |
| 443 | const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; | 491 | const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset); |
| 444 | 492 | ||
| 445 | switch (current_page_table->attributes[page_index]) { | 493 | switch (page_table.attributes[page_index]) { |
| 446 | case PageType::Unmapped: { | 494 | case PageType::Unmapped: { |
| 447 | LOG_ERROR(HW_Memory, "unmapped ReadBlock @ 0x%llx (start address = 0x%llx, size = %zu)", | 495 | LOG_ERROR(HW_Memory, "unmapped ReadBlock @ 0x%08X (start address = 0x%08X, size = %zu)", |
| 448 | current_vaddr, src_addr, size); | 496 | current_vaddr, src_addr, size); |
| 449 | std::memset(dest_buffer, 0, copy_amount); | 497 | std::memset(dest_buffer, 0, copy_amount); |
| 450 | break; | 498 | break; |
| 451 | } | 499 | } |
| 452 | case PageType::Memory: { | 500 | case PageType::Memory: { |
| 453 | DEBUG_ASSERT(current_page_table->pointers[page_index]); | 501 | DEBUG_ASSERT(page_table.pointers[page_index]); |
| 454 | 502 | ||
| 455 | const u8* src_ptr = current_page_table->pointers[page_index] + page_offset; | 503 | const u8* src_ptr = page_table.pointers[page_index] + page_offset; |
| 456 | std::memcpy(dest_buffer, src_ptr, copy_amount); | 504 | std::memcpy(dest_buffer, src_ptr, copy_amount); |
| 457 | break; | 505 | break; |
| 458 | } | 506 | } |
| 459 | case PageType::Special: { | 507 | case PageType::Special: { |
| 460 | DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); | 508 | MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr); |
| 461 | 509 | DEBUG_ASSERT(handler); | |
| 462 | GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, dest_buffer, copy_amount); | 510 | handler->ReadBlock(current_vaddr, dest_buffer, copy_amount); |
| 463 | break; | 511 | break; |
| 464 | } | 512 | } |
| 465 | case PageType::RasterizerCachedMemory: { | 513 | case PageType::RasterizerCachedMemory: { |
| 466 | RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); | 514 | RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount), |
| 467 | std::memcpy(dest_buffer, GetPointerFromVMA(current_vaddr), copy_amount); | 515 | FlushMode::Flush); |
| 516 | std::memcpy(dest_buffer, GetPointerFromVMA(process, current_vaddr), copy_amount); | ||
| 468 | break; | 517 | break; |
| 469 | } | 518 | } |
| 470 | case PageType::RasterizerCachedSpecial: { | 519 | case PageType::RasterizerCachedSpecial: { |
| 471 | DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); | 520 | MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr); |
| 472 | RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); | 521 | DEBUG_ASSERT(handler); |
| 473 | GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, dest_buffer, copy_amount); | 522 | RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount), |
| 523 | FlushMode::Flush); | ||
| 524 | handler->ReadBlock(current_vaddr, dest_buffer, copy_amount); | ||
| 474 | break; | 525 | break; |
| 475 | } | 526 | } |
| 476 | default: | 527 | default: |
| @@ -484,6 +535,10 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { | |||
| 484 | } | 535 | } |
| 485 | } | 536 | } |
| 486 | 537 | ||
| 538 | void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { | ||
| 539 | ReadBlock(*Kernel::g_current_process, src_addr, dest_buffer, size); | ||
| 540 | } | ||
| 541 | |||
| 487 | void Write8(const VAddr addr, const u8 data) { | 542 | void Write8(const VAddr addr, const u8 data) { |
| 488 | Write<u8>(addr, data); | 543 | Write<u8>(addr, data); |
| 489 | } | 544 | } |
| @@ -500,44 +555,49 @@ void Write64(const VAddr addr, const u64 data) { | |||
| 500 | Write<u64_le>(addr, data); | 555 | Write<u64_le>(addr, data); |
| 501 | } | 556 | } |
| 502 | 557 | ||
| 503 | void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size) { | 558 | void WriteBlock(const Kernel::Process& process, const VAddr dest_addr, const void* src_buffer, |
| 559 | const size_t size) { | ||
| 560 | auto& page_table = process.vm_manager.page_table; | ||
| 504 | size_t remaining_size = size; | 561 | size_t remaining_size = size; |
| 505 | size_t page_index = dest_addr >> PAGE_BITS; | 562 | size_t page_index = dest_addr >> PAGE_BITS; |
| 506 | size_t page_offset = dest_addr & PAGE_MASK; | 563 | size_t page_offset = dest_addr & PAGE_MASK; |
| 507 | 564 | ||
| 508 | while (remaining_size > 0) { | 565 | while (remaining_size > 0) { |
| 509 | const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); | 566 | const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); |
| 510 | const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; | 567 | const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset); |
| 511 | 568 | ||
| 512 | switch (current_page_table->attributes[page_index]) { | 569 | switch (page_table.attributes[page_index]) { |
| 513 | case PageType::Unmapped: { | 570 | case PageType::Unmapped: { |
| 514 | LOG_ERROR(HW_Memory, | 571 | LOG_ERROR(HW_Memory, |
| 515 | "unmapped WriteBlock @ 0x%llx (start address = 0x%llx, size = %zu)", | 572 | "unmapped WriteBlock @ 0x%08X (start address = 0x%08X, size = %zu)", |
| 516 | current_vaddr, dest_addr, size); | 573 | current_vaddr, dest_addr, size); |
| 517 | break; | 574 | break; |
| 518 | } | 575 | } |
| 519 | case PageType::Memory: { | 576 | case PageType::Memory: { |
| 520 | DEBUG_ASSERT(current_page_table->pointers[page_index]); | 577 | DEBUG_ASSERT(page_table.pointers[page_index]); |
| 521 | 578 | ||
| 522 | u8* dest_ptr = current_page_table->pointers[page_index] + page_offset; | 579 | u8* dest_ptr = page_table.pointers[page_index] + page_offset; |
| 523 | std::memcpy(dest_ptr, src_buffer, copy_amount); | 580 | std::memcpy(dest_ptr, src_buffer, copy_amount); |
| 524 | break; | 581 | break; |
| 525 | } | 582 | } |
| 526 | case PageType::Special: { | 583 | case PageType::Special: { |
| 527 | DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); | 584 | MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr); |
| 528 | 585 | DEBUG_ASSERT(handler); | |
| 529 | GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, src_buffer, copy_amount); | 586 | handler->WriteBlock(current_vaddr, src_buffer, copy_amount); |
| 530 | break; | 587 | break; |
| 531 | } | 588 | } |
| 532 | case PageType::RasterizerCachedMemory: { | 589 | case PageType::RasterizerCachedMemory: { |
| 533 | RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); | 590 | RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount), |
| 534 | std::memcpy(GetPointerFromVMA(current_vaddr), src_buffer, copy_amount); | 591 | FlushMode::FlushAndInvalidate); |
| 592 | std::memcpy(GetPointerFromVMA(process, current_vaddr), src_buffer, copy_amount); | ||
| 535 | break; | 593 | break; |
| 536 | } | 594 | } |
| 537 | case PageType::RasterizerCachedSpecial: { | 595 | case PageType::RasterizerCachedSpecial: { |
| 538 | DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); | 596 | MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr); |
| 539 | RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); | 597 | DEBUG_ASSERT(handler); |
| 540 | GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, src_buffer, copy_amount); | 598 | RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount), |
| 599 | FlushMode::FlushAndInvalidate); | ||
| 600 | handler->WriteBlock(current_vaddr, src_buffer, copy_amount); | ||
| 541 | break; | 601 | break; |
| 542 | } | 602 | } |
| 543 | default: | 603 | default: |
| @@ -551,6 +611,10 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size | |||
| 551 | } | 611 | } |
| 552 | } | 612 | } |
| 553 | 613 | ||
| 614 | void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size) { | ||
| 615 | WriteBlock(*Kernel::g_current_process, dest_addr, src_buffer, size); | ||
| 616 | } | ||
| 617 | |||
| 554 | void ZeroBlock(const VAddr dest_addr, const size_t size) { | 618 | void ZeroBlock(const VAddr dest_addr, const size_t size) { |
| 555 | size_t remaining_size = size; | 619 | size_t remaining_size = size; |
| 556 | size_t page_index = dest_addr >> PAGE_BITS; | 620 | size_t page_index = dest_addr >> PAGE_BITS; |
| @@ -560,11 +624,11 @@ void ZeroBlock(const VAddr dest_addr, const size_t size) { | |||
| 560 | 624 | ||
| 561 | while (remaining_size > 0) { | 625 | while (remaining_size > 0) { |
| 562 | const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); | 626 | const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); |
| 563 | const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; | 627 | const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset); |
| 564 | 628 | ||
| 565 | switch (current_page_table->attributes[page_index]) { | 629 | switch (current_page_table->attributes[page_index]) { |
| 566 | case PageType::Unmapped: { | 630 | case PageType::Unmapped: { |
| 567 | LOG_ERROR(HW_Memory, "unmapped ZeroBlock @ 0x%llx (start address = 0x%llx, size = %zu)", | 631 | LOG_ERROR(HW_Memory, "unmapped ZeroBlock @ 0x%08X (start address = 0x%08X, size = %zu)", |
| 568 | current_vaddr, dest_addr, size); | 632 | current_vaddr, dest_addr, size); |
| 569 | break; | 633 | break; |
| 570 | } | 634 | } |
| @@ -582,13 +646,15 @@ void ZeroBlock(const VAddr dest_addr, const size_t size) { | |||
| 582 | break; | 646 | break; |
| 583 | } | 647 | } |
| 584 | case PageType::RasterizerCachedMemory: { | 648 | case PageType::RasterizerCachedMemory: { |
| 585 | RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); | 649 | RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount), |
| 650 | FlushMode::FlushAndInvalidate); | ||
| 586 | std::memset(GetPointerFromVMA(current_vaddr), 0, copy_amount); | 651 | std::memset(GetPointerFromVMA(current_vaddr), 0, copy_amount); |
| 587 | break; | 652 | break; |
| 588 | } | 653 | } |
| 589 | case PageType::RasterizerCachedSpecial: { | 654 | case PageType::RasterizerCachedSpecial: { |
| 590 | DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); | 655 | DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); |
| 591 | RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); | 656 | RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount), |
| 657 | FlushMode::FlushAndInvalidate); | ||
| 592 | GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, zeros.data(), copy_amount); | 658 | GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, zeros.data(), copy_amount); |
| 593 | break; | 659 | break; |
| 594 | } | 660 | } |
| @@ -609,11 +675,11 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) { | |||
| 609 | 675 | ||
| 610 | while (remaining_size > 0) { | 676 | while (remaining_size > 0) { |
| 611 | const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); | 677 | const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); |
| 612 | const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; | 678 | const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset); |
| 613 | 679 | ||
| 614 | switch (current_page_table->attributes[page_index]) { | 680 | switch (current_page_table->attributes[page_index]) { |
| 615 | case PageType::Unmapped: { | 681 | case PageType::Unmapped: { |
| 616 | LOG_ERROR(HW_Memory, "unmapped CopyBlock @ 0x%llx (start address = 0x%llx, size = %zu)", | 682 | LOG_ERROR(HW_Memory, "unmapped CopyBlock @ 0x%08X (start address = 0x%08X, size = %zu)", |
| 617 | current_vaddr, src_addr, size); | 683 | current_vaddr, src_addr, size); |
| 618 | ZeroBlock(dest_addr, copy_amount); | 684 | ZeroBlock(dest_addr, copy_amount); |
| 619 | break; | 685 | break; |
| @@ -633,13 +699,15 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) { | |||
| 633 | break; | 699 | break; |
| 634 | } | 700 | } |
| 635 | case PageType::RasterizerCachedMemory: { | 701 | case PageType::RasterizerCachedMemory: { |
| 636 | RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); | 702 | RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount), |
| 703 | FlushMode::Flush); | ||
| 637 | WriteBlock(dest_addr, GetPointerFromVMA(current_vaddr), copy_amount); | 704 | WriteBlock(dest_addr, GetPointerFromVMA(current_vaddr), copy_amount); |
| 638 | break; | 705 | break; |
| 639 | } | 706 | } |
| 640 | case PageType::RasterizerCachedSpecial: { | 707 | case PageType::RasterizerCachedSpecial: { |
| 641 | DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); | 708 | DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); |
| 642 | RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); | 709 | RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount), |
| 710 | FlushMode::Flush); | ||
| 643 | 711 | ||
| 644 | std::vector<u8> buffer(copy_amount); | 712 | std::vector<u8> buffer(copy_amount); |
| 645 | GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, buffer.data(), buffer.size()); | 713 | GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, buffer.data(), buffer.size()); |
| @@ -652,8 +720,8 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) { | |||
| 652 | 720 | ||
| 653 | page_index++; | 721 | page_index++; |
| 654 | page_offset = 0; | 722 | page_offset = 0; |
| 655 | dest_addr += copy_amount; | 723 | dest_addr += static_cast<VAddr>(copy_amount); |
| 656 | src_addr += copy_amount; | 724 | src_addr += static_cast<VAddr>(copy_amount); |
| 657 | remaining_size -= copy_amount; | 725 | remaining_size -= copy_amount; |
| 658 | } | 726 | } |
| 659 | } | 727 | } |
| @@ -721,7 +789,7 @@ boost::optional<PAddr> TryVirtualToPhysicalAddress(const VAddr addr) { | |||
| 721 | PAddr VirtualToPhysicalAddress(const VAddr addr) { | 789 | PAddr VirtualToPhysicalAddress(const VAddr addr) { |
| 722 | auto paddr = TryVirtualToPhysicalAddress(addr); | 790 | auto paddr = TryVirtualToPhysicalAddress(addr); |
| 723 | if (!paddr) { | 791 | if (!paddr) { |
| 724 | LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%llx", addr); | 792 | LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%08X", addr); |
| 725 | // To help with debugging, set bit on address so that it's obviously invalid. | 793 | // To help with debugging, set bit on address so that it's obviously invalid. |
| 726 | return addr | 0x80000000; | 794 | return addr | 0x80000000; |
| 727 | } | 795 | } |
| @@ -746,4 +814,4 @@ boost::optional<VAddr> PhysicalToVirtualAddress(const PAddr addr) { | |||
| 746 | return boost::none; | 814 | return boost::none; |
| 747 | } | 815 | } |
| 748 | 816 | ||
| 749 | } // namespace | 817 | } // namespace Memory |
diff --git a/src/core/memory.h b/src/core/memory.h index e14d68654..9a04b9a16 100644 --- a/src/core/memory.h +++ b/src/core/memory.h | |||
| @@ -6,9 +6,16 @@ | |||
| 6 | 6 | ||
| 7 | #include <array> | 7 | #include <array> |
| 8 | #include <cstddef> | 8 | #include <cstddef> |
| 9 | #include <map> | ||
| 9 | #include <string> | 10 | #include <string> |
| 11 | #include <vector> | ||
| 10 | #include <boost/optional.hpp> | 12 | #include <boost/optional.hpp> |
| 11 | #include "common/common_types.h" | 13 | #include "common/common_types.h" |
| 14 | #include "core/mmio.h" | ||
| 15 | |||
| 16 | namespace Kernel { | ||
| 17 | class Process; | ||
| 18 | } | ||
| 12 | 19 | ||
| 13 | namespace Memory { | 20 | namespace Memory { |
| 14 | 21 | ||
| @@ -19,7 +26,60 @@ namespace Memory { | |||
| 19 | const int PAGE_BITS = 12; | 26 | const int PAGE_BITS = 12; |
| 20 | const u64 PAGE_SIZE = 1 << PAGE_BITS; | 27 | const u64 PAGE_SIZE = 1 << PAGE_BITS; |
| 21 | const u64 PAGE_MASK = PAGE_SIZE - 1; | 28 | const u64 PAGE_MASK = PAGE_SIZE - 1; |
| 22 | const size_t PAGE_TABLE_NUM_ENTRIES = 1ULL << (64 - PAGE_BITS); | 29 | const size_t PAGE_TABLE_NUM_ENTRIES = 1ULL << (32 - PAGE_BITS); |
| 30 | |||
| 31 | enum class PageType { | ||
| 32 | /// Page is unmapped and should cause an access error. | ||
| 33 | Unmapped, | ||
| 34 | /// Page is mapped to regular memory. This is the only type you can get pointers to. | ||
| 35 | Memory, | ||
| 36 | /// Page is mapped to regular memory, but also needs to check for rasterizer cache flushing and | ||
| 37 | /// invalidation | ||
| 38 | RasterizerCachedMemory, | ||
| 39 | /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions. | ||
| 40 | Special, | ||
| 41 | /// Page is mapped to a I/O region, but also needs to check for rasterizer cache flushing and | ||
| 42 | /// invalidation | ||
| 43 | RasterizerCachedSpecial, | ||
| 44 | }; | ||
| 45 | |||
| 46 | struct SpecialRegion { | ||
| 47 | VAddr base; | ||
| 48 | u32 size; | ||
| 49 | MMIORegionPointer handler; | ||
| 50 | }; | ||
| 51 | |||
| 52 | /** | ||
| 53 | * A (reasonably) fast way of allowing switchable and remappable process address spaces. It loosely | ||
| 54 | * mimics the way a real CPU page table works, but instead is optimized for minimal decoding and | ||
| 55 | * fetching requirements when accessing. In the usual case of an access to regular memory, it only | ||
| 56 | * requires an indexed fetch and a check for NULL. | ||
| 57 | */ | ||
| 58 | struct PageTable { | ||
| 59 | /** | ||
| 60 | * Array of memory pointers backing each page. An entry can only be non-null if the | ||
| 61 | * corresponding entry in the `attributes` array is of type `Memory`. | ||
| 62 | */ | ||
| 63 | std::array<u8*, PAGE_TABLE_NUM_ENTRIES> pointers; | ||
| 64 | |||
| 65 | /** | ||
| 66 | * Contains MMIO handlers that back memory regions whose entries in the `attribute` array is of | ||
| 67 | * type `Special`. | ||
| 68 | */ | ||
| 69 | std::vector<SpecialRegion> special_regions; | ||
| 70 | |||
| 71 | /** | ||
| 72 | * Array of fine grained page attributes. If it is set to any value other than `Memory`, then | ||
| 73 | * the corresponding entry in `pointers` MUST be set to null. | ||
| 74 | */ | ||
| 75 | std::array<PageType, PAGE_TABLE_NUM_ENTRIES> attributes; | ||
| 76 | |||
| 77 | /** | ||
| 78 | * Indicates the number of externally cached resources touching a page that should be | ||
| 79 | * flushed before the memory is accessed | ||
| 80 | */ | ||
| 81 | std::array<u8, PAGE_TABLE_NUM_ENTRIES> cached_res_count; | ||
| 82 | }; | ||
| 23 | 83 | ||
| 24 | /// Physical memory regions as seen from the ARM11 | 84 | /// Physical memory regions as seen from the ARM11 |
| 25 | enum : PAddr { | 85 | enum : PAddr { |
| @@ -126,7 +186,14 @@ enum : VAddr { | |||
| 126 | NEW_LINEAR_HEAP_VADDR_END = NEW_LINEAR_HEAP_VADDR + NEW_LINEAR_HEAP_SIZE, | 186 | NEW_LINEAR_HEAP_VADDR_END = NEW_LINEAR_HEAP_VADDR + NEW_LINEAR_HEAP_SIZE, |
| 127 | }; | 187 | }; |
| 128 | 188 | ||
| 189 | /// Currently active page table | ||
| 190 | void SetCurrentPageTable(PageTable* page_table); | ||
| 191 | PageTable* GetCurrentPageTable(); | ||
| 192 | |||
| 193 | /// Determines if the given VAddr is valid for the specified process. | ||
| 194 | bool IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr); | ||
| 129 | bool IsValidVirtualAddress(const VAddr addr); | 195 | bool IsValidVirtualAddress(const VAddr addr); |
| 196 | |||
| 130 | bool IsValidPhysicalAddress(const PAddr addr); | 197 | bool IsValidPhysicalAddress(const PAddr addr); |
| 131 | 198 | ||
| 132 | u8 Read8(VAddr addr); | 199 | u8 Read8(VAddr addr); |
| @@ -139,7 +206,11 @@ void Write16(VAddr addr, u16 data); | |||
| 139 | void Write32(VAddr addr, u32 data); | 206 | void Write32(VAddr addr, u32 data); |
| 140 | void Write64(VAddr addr, u64 data); | 207 | void Write64(VAddr addr, u64 data); |
| 141 | 208 | ||
| 209 | void ReadBlock(const Kernel::Process& process, const VAddr src_addr, void* dest_buffer, | ||
| 210 | size_t size); | ||
| 142 | void ReadBlock(const VAddr src_addr, void* dest_buffer, size_t size); | 211 | void ReadBlock(const VAddr src_addr, void* dest_buffer, size_t size); |
| 212 | void WriteBlock(const Kernel::Process& process, const VAddr dest_addr, const void* src_buffer, | ||
| 213 | size_t size); | ||
| 143 | void WriteBlock(const VAddr dest_addr, const void* src_buffer, size_t size); | 214 | void WriteBlock(const VAddr dest_addr, const void* src_buffer, size_t size); |
| 144 | void ZeroBlock(const VAddr dest_addr, const size_t size); | 215 | void ZeroBlock(const VAddr dest_addr, const size_t size); |
| 145 | void CopyBlock(VAddr dest_addr, VAddr src_addr, size_t size); | 216 | void CopyBlock(VAddr dest_addr, VAddr src_addr, size_t size); |
| @@ -169,8 +240,6 @@ boost::optional<VAddr> PhysicalToVirtualAddress(PAddr addr); | |||
| 169 | 240 | ||
| 170 | /** | 241 | /** |
| 171 | * Gets a pointer to the memory region beginning at the specified physical address. | 242 | * Gets a pointer to the memory region beginning at the specified physical address. |
| 172 | * | ||
| 173 | * @note This is currently implemented using PhysicalToVirtualAddress(). | ||
| 174 | */ | 243 | */ |
| 175 | u8* GetPhysicalPointer(PAddr address); | 244 | u8* GetPhysicalPointer(PAddr address); |
| 176 | 245 | ||
| @@ -178,17 +247,17 @@ u8* GetPhysicalPointer(PAddr address); | |||
| 178 | * Adds the supplied value to the rasterizer resource cache counter of each | 247 | * Adds the supplied value to the rasterizer resource cache counter of each |
| 179 | * page touching the region. | 248 | * page touching the region. |
| 180 | */ | 249 | */ |
| 181 | void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta); | 250 | void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta); |
| 182 | 251 | ||
| 183 | /** | 252 | /** |
| 184 | * Flushes any externally cached rasterizer resources touching the given region. | 253 | * Flushes any externally cached rasterizer resources touching the given region. |
| 185 | */ | 254 | */ |
| 186 | void RasterizerFlushRegion(PAddr start, u64 size); | 255 | void RasterizerFlushRegion(PAddr start, u32 size); |
| 187 | 256 | ||
| 188 | /** | 257 | /** |
| 189 | * Flushes and invalidates any externally cached rasterizer resources touching the given region. | 258 | * Flushes and invalidates any externally cached rasterizer resources touching the given region. |
| 190 | */ | 259 | */ |
| 191 | void RasterizerFlushAndInvalidateRegion(PAddr start, u64 size); | 260 | void RasterizerFlushAndInvalidateRegion(PAddr start, u32 size); |
| 192 | 261 | ||
| 193 | enum class FlushMode { | 262 | enum class FlushMode { |
| 194 | /// Write back modified surfaces to RAM | 263 | /// Write back modified surfaces to RAM |
| @@ -201,12 +270,6 @@ enum class FlushMode { | |||
| 201 | * Flushes and invalidates any externally cached rasterizer resources touching the given virtual | 270 | * Flushes and invalidates any externally cached rasterizer resources touching the given virtual |
| 202 | * address region. | 271 | * address region. |
| 203 | */ | 272 | */ |
| 204 | void RasterizerFlushVirtualRegion(VAddr start, u64 size, FlushMode mode); | 273 | void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode); |
| 205 | 274 | ||
| 206 | /** | 275 | } // namespace Memory |
| 207 | * Dynarmic has an optimization to memory accesses when the pointer to the page exists that | ||
| 208 | * can be used by setting up the current page table as a callback. This function is used to | ||
| 209 | * retrieve the current page table for that purpose. | ||
| 210 | */ | ||
| 211 | //std::array<u8*, PAGE_TABLE_NUM_ENTRIES>* GetCurrentPageTablePointers(); | ||
| 212 | } | ||
diff --git a/src/core/memory_setup.h b/src/core/memory_setup.h index fc3fda466..c58baa50b 100644 --- a/src/core/memory_setup.h +++ b/src/core/memory_setup.h | |||
| @@ -9,24 +9,24 @@ | |||
| 9 | 9 | ||
| 10 | namespace Memory { | 10 | namespace Memory { |
| 11 | 11 | ||
| 12 | void InitMemoryMap(); | ||
| 13 | |||
| 14 | /** | 12 | /** |
| 15 | * Maps an allocated buffer onto a region of the emulated process address space. | 13 | * Maps an allocated buffer onto a region of the emulated process address space. |
| 16 | * | 14 | * |
| 15 | * @param page_table The page table of the emulated process. | ||
| 17 | * @param base The address to start mapping at. Must be page-aligned. | 16 | * @param base The address to start mapping at. Must be page-aligned. |
| 18 | * @param size The amount of bytes to map. Must be page-aligned. | 17 | * @param size The amount of bytes to map. Must be page-aligned. |
| 19 | * @param target Buffer with the memory backing the mapping. Must be of length at least `size`. | 18 | * @param target Buffer with the memory backing the mapping. Must be of length at least `size`. |
| 20 | */ | 19 | */ |
| 21 | void MapMemoryRegion(VAddr base, u64 size, u8* target); | 20 | void MapMemoryRegion(PageTable& page_table, VAddr base, u32 size, u8* target); |
| 22 | 21 | ||
| 23 | /** | 22 | /** |
| 24 | * Maps a region of the emulated process address space as a IO region. | 23 | * Maps a region of the emulated process address space as a IO region. |
| 24 | * @param page_table The page table of the emulated process. | ||
| 25 | * @param base The address to start mapping at. Must be page-aligned. | 25 | * @param base The address to start mapping at. Must be page-aligned. |
| 26 | * @param size The amount of bytes to map. Must be page-aligned. | 26 | * @param size The amount of bytes to map. Must be page-aligned. |
| 27 | * @param mmio_handler The handler that backs the mapping. | 27 | * @param mmio_handler The handler that backs the mapping. |
| 28 | */ | 28 | */ |
| 29 | void MapIoRegion(VAddr base, u64 size, MMIORegionPointer mmio_handler); | 29 | void MapIoRegion(PageTable& page_table, VAddr base, u32 size, MMIORegionPointer mmio_handler); |
| 30 | 30 | ||
| 31 | void UnmapRegion(VAddr base, u64 size); | 31 | void UnmapRegion(PageTable& page_table, VAddr base, u32 size); |
| 32 | } | 32 | } |
diff --git a/src/core/settings.cpp b/src/core/settings.cpp index d4f0429d1..efcf1267d 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp | |||
| @@ -36,4 +36,4 @@ void Apply() { | |||
| 36 | Service::IR::ReloadInputDevices(); | 36 | Service::IR::ReloadInputDevices(); |
| 37 | } | 37 | } |
| 38 | 38 | ||
| 39 | } // namespace | 39 | } // namespace Settings |
diff --git a/src/core/settings.h b/src/core/settings.h index ee16bb90a..8d78cb424 100644 --- a/src/core/settings.h +++ b/src/core/settings.h | |||
| @@ -15,6 +15,7 @@ enum class LayoutOption { | |||
| 15 | Default, | 15 | Default, |
| 16 | SingleScreen, | 16 | SingleScreen, |
| 17 | LargeScreen, | 17 | LargeScreen, |
| 18 | SideScreen, | ||
| 18 | }; | 19 | }; |
| 19 | 20 | ||
| 20 | namespace NativeButton { | 21 | namespace NativeButton { |
| @@ -70,7 +71,7 @@ enum Values { | |||
| 70 | static const std::array<const char*, NumAnalogs> mapping = {{ | 71 | static const std::array<const char*, NumAnalogs> mapping = {{ |
| 71 | "circle_pad", "c_stick", | 72 | "circle_pad", "c_stick", |
| 72 | }}; | 73 | }}; |
| 73 | } // namespace NumAnalog | 74 | } // namespace NativeAnalog |
| 74 | 75 | ||
| 75 | struct Values { | 76 | struct Values { |
| 76 | // CheckNew3DS | 77 | // CheckNew3DS |
| @@ -79,6 +80,8 @@ struct Values { | |||
| 79 | // Controls | 80 | // Controls |
| 80 | std::array<std::string, NativeButton::NumButtons> buttons; | 81 | std::array<std::string, NativeButton::NumButtons> buttons; |
| 81 | std::array<std::string, NativeAnalog::NumAnalogs> analogs; | 82 | std::array<std::string, NativeAnalog::NumAnalogs> analogs; |
| 83 | std::string motion_device; | ||
| 84 | std::string touch_device; | ||
| 82 | 85 | ||
| 83 | // Core | 86 | // Core |
| 84 | bool use_cpu_jit; | 87 | bool use_cpu_jit; |
| @@ -128,7 +131,11 @@ struct Values { | |||
| 128 | u16 gdbstub_port; | 131 | u16 gdbstub_port; |
| 129 | 132 | ||
| 130 | // WebService | 133 | // WebService |
| 134 | bool enable_telemetry; | ||
| 131 | std::string telemetry_endpoint_url; | 135 | std::string telemetry_endpoint_url; |
| 136 | std::string verify_endpoint_url; | ||
| 137 | std::string citra_username; | ||
| 138 | std::string citra_token; | ||
| 132 | } extern values; | 139 | } extern values; |
| 133 | 140 | ||
| 134 | // a special value for Values::region_value indicating that citra will automatically select a region | 141 | // a special value for Values::region_value indicating that citra will automatically select a region |
| @@ -136,4 +143,4 @@ struct Values { | |||
| 136 | static constexpr int REGION_VALUE_AUTO_SELECT = -1; | 143 | static constexpr int REGION_VALUE_AUTO_SELECT = -1; |
| 137 | 144 | ||
| 138 | void Apply(); | 145 | void Apply(); |
| 139 | } | 146 | } // namespace Settings |
diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index 841d6cfa1..ca517ff44 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp | |||
| @@ -3,15 +3,19 @@ | |||
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <cstring> | 5 | #include <cstring> |
| 6 | #include <cryptopp/osrng.h> | ||
| 6 | 7 | ||
| 7 | #include "common/assert.h" | 8 | #include "common/assert.h" |
| 9 | #include "common/file_util.h" | ||
| 8 | #include "common/scm_rev.h" | 10 | #include "common/scm_rev.h" |
| 9 | #include "common/x64/cpu_detect.h" | 11 | #include "common/x64/cpu_detect.h" |
| 12 | #include "core/core.h" | ||
| 10 | #include "core/settings.h" | 13 | #include "core/settings.h" |
| 11 | #include "core/telemetry_session.h" | 14 | #include "core/telemetry_session.h" |
| 12 | 15 | ||
| 13 | #ifdef ENABLE_WEB_SERVICE | 16 | #ifdef ENABLE_WEB_SERVICE |
| 14 | #include "web_service/telemetry_json.h" | 17 | #include "web_service/telemetry_json.h" |
| 18 | #include "web_service/verify_login.h" | ||
| 15 | #endif | 19 | #endif |
| 16 | 20 | ||
| 17 | namespace Core { | 21 | namespace Core { |
| @@ -28,23 +32,94 @@ static const char* CpuVendorToStr(Common::CPUVendor vendor) { | |||
| 28 | UNREACHABLE(); | 32 | UNREACHABLE(); |
| 29 | } | 33 | } |
| 30 | 34 | ||
| 35 | static u64 GenerateTelemetryId() { | ||
| 36 | u64 telemetry_id{}; | ||
| 37 | CryptoPP::AutoSeededRandomPool rng; | ||
| 38 | rng.GenerateBlock(reinterpret_cast<CryptoPP::byte*>(&telemetry_id), sizeof(u64)); | ||
| 39 | return telemetry_id; | ||
| 40 | } | ||
| 41 | |||
| 42 | u64 GetTelemetryId() { | ||
| 43 | u64 telemetry_id{}; | ||
| 44 | static const std::string& filename{FileUtil::GetUserPath(D_CONFIG_IDX) + "telemetry_id"}; | ||
| 45 | |||
| 46 | if (FileUtil::Exists(filename)) { | ||
| 47 | FileUtil::IOFile file(filename, "rb"); | ||
| 48 | if (!file.IsOpen()) { | ||
| 49 | LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str()); | ||
| 50 | return {}; | ||
| 51 | } | ||
| 52 | file.ReadBytes(&telemetry_id, sizeof(u64)); | ||
| 53 | } else { | ||
| 54 | FileUtil::IOFile file(filename, "wb"); | ||
| 55 | if (!file.IsOpen()) { | ||
| 56 | LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str()); | ||
| 57 | return {}; | ||
| 58 | } | ||
| 59 | telemetry_id = GenerateTelemetryId(); | ||
| 60 | file.WriteBytes(&telemetry_id, sizeof(u64)); | ||
| 61 | } | ||
| 62 | |||
| 63 | return telemetry_id; | ||
| 64 | } | ||
| 65 | |||
| 66 | u64 RegenerateTelemetryId() { | ||
| 67 | const u64 new_telemetry_id{GenerateTelemetryId()}; | ||
| 68 | static const std::string& filename{FileUtil::GetUserPath(D_CONFIG_IDX) + "telemetry_id"}; | ||
| 69 | |||
| 70 | FileUtil::IOFile file(filename, "wb"); | ||
| 71 | if (!file.IsOpen()) { | ||
| 72 | LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str()); | ||
| 73 | return {}; | ||
| 74 | } | ||
| 75 | file.WriteBytes(&new_telemetry_id, sizeof(u64)); | ||
| 76 | return new_telemetry_id; | ||
| 77 | } | ||
| 78 | |||
| 79 | std::future<bool> VerifyLogin(std::string username, std::string token, std::function<void()> func) { | ||
| 80 | #ifdef ENABLE_WEB_SERVICE | ||
| 81 | return WebService::VerifyLogin(username, token, Settings::values.verify_endpoint_url, func); | ||
| 82 | #else | ||
| 83 | return std::async(std::launch::async, [func{std::move(func)}]() { | ||
| 84 | func(); | ||
| 85 | return false; | ||
| 86 | }); | ||
| 87 | #endif | ||
| 88 | } | ||
| 89 | |||
| 31 | TelemetrySession::TelemetrySession() { | 90 | TelemetrySession::TelemetrySession() { |
| 32 | #ifdef ENABLE_WEB_SERVICE | 91 | #ifdef ENABLE_WEB_SERVICE |
| 33 | backend = std::make_unique<WebService::TelemetryJson>(); | 92 | if (Settings::values.enable_telemetry) { |
| 93 | backend = std::make_unique<WebService::TelemetryJson>( | ||
| 94 | Settings::values.telemetry_endpoint_url, Settings::values.citra_username, | ||
| 95 | Settings::values.citra_token); | ||
| 96 | } else { | ||
| 97 | backend = std::make_unique<Telemetry::NullVisitor>(); | ||
| 98 | } | ||
| 34 | #else | 99 | #else |
| 35 | backend = std::make_unique<Telemetry::NullVisitor>(); | 100 | backend = std::make_unique<Telemetry::NullVisitor>(); |
| 36 | #endif | 101 | #endif |
| 102 | // Log one-time top-level information | ||
| 103 | AddField(Telemetry::FieldType::None, "TelemetryId", GetTelemetryId()); | ||
| 104 | |||
| 37 | // Log one-time session start information | 105 | // Log one-time session start information |
| 38 | const s64 init_time{std::chrono::duration_cast<std::chrono::milliseconds>( | 106 | const s64 init_time{std::chrono::duration_cast<std::chrono::milliseconds>( |
| 39 | std::chrono::system_clock::now().time_since_epoch()) | 107 | std::chrono::system_clock::now().time_since_epoch()) |
| 40 | .count()}; | 108 | .count()}; |
| 41 | AddField(Telemetry::FieldType::Session, "Init_Time", init_time); | 109 | AddField(Telemetry::FieldType::Session, "Init_Time", init_time); |
| 110 | std::string program_name; | ||
| 111 | const Loader::ResultStatus res{System::GetInstance().GetAppLoader().ReadTitle(program_name)}; | ||
| 112 | if (res == Loader::ResultStatus::Success) { | ||
| 113 | AddField(Telemetry::FieldType::Session, "ProgramName", program_name); | ||
| 114 | } | ||
| 42 | 115 | ||
| 43 | // Log application information | 116 | // Log application information |
| 44 | const bool is_git_dirty{std::strstr(Common::g_scm_desc, "dirty") != nullptr}; | 117 | const bool is_git_dirty{std::strstr(Common::g_scm_desc, "dirty") != nullptr}; |
| 45 | AddField(Telemetry::FieldType::App, "Git_IsDirty", is_git_dirty); | 118 | AddField(Telemetry::FieldType::App, "Git_IsDirty", is_git_dirty); |
| 46 | AddField(Telemetry::FieldType::App, "Git_Branch", Common::g_scm_branch); | 119 | AddField(Telemetry::FieldType::App, "Git_Branch", Common::g_scm_branch); |
| 47 | AddField(Telemetry::FieldType::App, "Git_Revision", Common::g_scm_rev); | 120 | AddField(Telemetry::FieldType::App, "Git_Revision", Common::g_scm_rev); |
| 121 | AddField(Telemetry::FieldType::App, "BuildDate", Common::g_build_date); | ||
| 122 | AddField(Telemetry::FieldType::App, "BuildName", Common::g_build_name); | ||
| 48 | 123 | ||
| 49 | // Log user system information | 124 | // Log user system information |
| 50 | AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); | 125 | AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); |
| @@ -68,6 +143,15 @@ TelemetrySession::TelemetrySession() { | |||
| 68 | Common::GetCPUCaps().sse4_1); | 143 | Common::GetCPUCaps().sse4_1); |
| 69 | AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_SSE42", | 144 | AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_SSE42", |
| 70 | Common::GetCPUCaps().sse4_2); | 145 | Common::GetCPUCaps().sse4_2); |
| 146 | #ifdef __APPLE__ | ||
| 147 | AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Apple"); | ||
| 148 | #elif defined(_WIN32) | ||
| 149 | AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Windows"); | ||
| 150 | #elif defined(__linux__) || defined(linux) || defined(__linux) | ||
| 151 | AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Linux"); | ||
| 152 | #else | ||
| 153 | AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Unknown"); | ||
| 154 | #endif | ||
| 71 | 155 | ||
| 72 | // Log user configuration information | 156 | // Log user configuration information |
| 73 | AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching", | 157 | AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching", |
diff --git a/src/core/telemetry_session.h b/src/core/telemetry_session.h index cf53835c3..550c6ea2d 100644 --- a/src/core/telemetry_session.h +++ b/src/core/telemetry_session.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <future> | ||
| 7 | #include <memory> | 8 | #include <memory> |
| 8 | #include "common/telemetry.h" | 9 | #include "common/telemetry.h" |
| 9 | 10 | ||
| @@ -35,4 +36,25 @@ private: | |||
| 35 | std::unique_ptr<Telemetry::VisitorInterface> backend; ///< Backend interface that logs fields | 36 | std::unique_ptr<Telemetry::VisitorInterface> backend; ///< Backend interface that logs fields |
| 36 | }; | 37 | }; |
| 37 | 38 | ||
| 39 | /** | ||
| 40 | * Gets TelemetryId, a unique identifier used for the user's telemetry sessions. | ||
| 41 | * @returns The current TelemetryId for the session. | ||
| 42 | */ | ||
| 43 | u64 GetTelemetryId(); | ||
| 44 | |||
| 45 | /** | ||
| 46 | * Regenerates TelemetryId, a unique identifier used for the user's telemetry sessions. | ||
| 47 | * @returns The new TelemetryId that was generated. | ||
| 48 | */ | ||
| 49 | u64 RegenerateTelemetryId(); | ||
| 50 | |||
| 51 | /** | ||
| 52 | * Verifies the username and token. | ||
| 53 | * @param username Citra username to use for authentication. | ||
| 54 | * @param token Citra token to use for authentication. | ||
| 55 | * @param func A function that gets exectued when the verification is finished | ||
| 56 | * @returns Future with bool indicating whether the verification succeeded | ||
| 57 | */ | ||
| 58 | std::future<bool> VerifyLogin(std::string username, std::string token, std::function<void()> func); | ||
| 59 | |||
| 38 | } // namespace Core | 60 | } // namespace Core |
diff --git a/src/input_common/CMakeLists.txt b/src/input_common/CMakeLists.txt index e3e36ada7..92792a702 100644 --- a/src/input_common/CMakeLists.txt +++ b/src/input_common/CMakeLists.txt | |||
| @@ -2,12 +2,14 @@ set(SRCS | |||
| 2 | analog_from_button.cpp | 2 | analog_from_button.cpp |
| 3 | keyboard.cpp | 3 | keyboard.cpp |
| 4 | main.cpp | 4 | main.cpp |
| 5 | motion_emu.cpp | ||
| 5 | ) | 6 | ) |
| 6 | 7 | ||
| 7 | set(HEADERS | 8 | set(HEADERS |
| 8 | analog_from_button.h | 9 | analog_from_button.h |
| 9 | keyboard.h | 10 | keyboard.h |
| 10 | main.h | 11 | main.h |
| 12 | motion_emu.h | ||
| 11 | ) | 13 | ) |
| 12 | 14 | ||
| 13 | if(SDL2_FOUND) | 15 | if(SDL2_FOUND) |
diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index 699f41e6b..557353740 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include "input_common/analog_from_button.h" | 7 | #include "input_common/analog_from_button.h" |
| 8 | #include "input_common/keyboard.h" | 8 | #include "input_common/keyboard.h" |
| 9 | #include "input_common/main.h" | 9 | #include "input_common/main.h" |
| 10 | #include "input_common/motion_emu.h" | ||
| 10 | #ifdef HAVE_SDL2 | 11 | #ifdef HAVE_SDL2 |
| 11 | #include "input_common/sdl/sdl.h" | 12 | #include "input_common/sdl/sdl.h" |
| 12 | #endif | 13 | #endif |
| @@ -14,12 +15,16 @@ | |||
| 14 | namespace InputCommon { | 15 | namespace InputCommon { |
| 15 | 16 | ||
| 16 | static std::shared_ptr<Keyboard> keyboard; | 17 | static std::shared_ptr<Keyboard> keyboard; |
| 18 | static std::shared_ptr<MotionEmu> motion_emu; | ||
| 17 | 19 | ||
| 18 | void Init() { | 20 | void Init() { |
| 19 | keyboard = std::make_shared<InputCommon::Keyboard>(); | 21 | keyboard = std::make_shared<Keyboard>(); |
| 20 | Input::RegisterFactory<Input::ButtonDevice>("keyboard", keyboard); | 22 | Input::RegisterFactory<Input::ButtonDevice>("keyboard", keyboard); |
| 21 | Input::RegisterFactory<Input::AnalogDevice>("analog_from_button", | 23 | Input::RegisterFactory<Input::AnalogDevice>("analog_from_button", |
| 22 | std::make_shared<InputCommon::AnalogFromButton>()); | 24 | std::make_shared<AnalogFromButton>()); |
| 25 | motion_emu = std::make_shared<MotionEmu>(); | ||
| 26 | Input::RegisterFactory<Input::MotionDevice>("motion_emu", motion_emu); | ||
| 27 | |||
| 23 | #ifdef HAVE_SDL2 | 28 | #ifdef HAVE_SDL2 |
| 24 | SDL::Init(); | 29 | SDL::Init(); |
| 25 | #endif | 30 | #endif |
| @@ -29,6 +34,8 @@ void Shutdown() { | |||
| 29 | Input::UnregisterFactory<Input::ButtonDevice>("keyboard"); | 34 | Input::UnregisterFactory<Input::ButtonDevice>("keyboard"); |
| 30 | keyboard.reset(); | 35 | keyboard.reset(); |
| 31 | Input::UnregisterFactory<Input::AnalogDevice>("analog_from_button"); | 36 | Input::UnregisterFactory<Input::AnalogDevice>("analog_from_button"); |
| 37 | Input::UnregisterFactory<Input::MotionDevice>("motion_emu"); | ||
| 38 | motion_emu.reset(); | ||
| 32 | 39 | ||
| 33 | #ifdef HAVE_SDL2 | 40 | #ifdef HAVE_SDL2 |
| 34 | SDL::Shutdown(); | 41 | SDL::Shutdown(); |
| @@ -39,6 +46,10 @@ Keyboard* GetKeyboard() { | |||
| 39 | return keyboard.get(); | 46 | return keyboard.get(); |
| 40 | } | 47 | } |
| 41 | 48 | ||
| 49 | MotionEmu* GetMotionEmu() { | ||
| 50 | return motion_emu.get(); | ||
| 51 | } | ||
| 52 | |||
| 42 | std::string GenerateKeyboardParam(int key_code) { | 53 | std::string GenerateKeyboardParam(int key_code) { |
| 43 | Common::ParamPackage param{ | 54 | Common::ParamPackage param{ |
| 44 | {"engine", "keyboard"}, {"code", std::to_string(key_code)}, | 55 | {"engine", "keyboard"}, {"code", std::to_string(key_code)}, |
diff --git a/src/input_common/main.h b/src/input_common/main.h index 140bbd014..5604f0fa8 100644 --- a/src/input_common/main.h +++ b/src/input_common/main.h | |||
| @@ -11,7 +11,7 @@ namespace InputCommon { | |||
| 11 | /// Initializes and registers all built-in input device factories. | 11 | /// Initializes and registers all built-in input device factories. |
| 12 | void Init(); | 12 | void Init(); |
| 13 | 13 | ||
| 14 | /// Unresisters all build-in input device factories and shut them down. | 14 | /// Deregisters all built-in input device factories and shuts them down. |
| 15 | void Shutdown(); | 15 | void Shutdown(); |
| 16 | 16 | ||
| 17 | class Keyboard; | 17 | class Keyboard; |
| @@ -19,6 +19,11 @@ class Keyboard; | |||
| 19 | /// Gets the keyboard button device factory. | 19 | /// Gets the keyboard button device factory. |
| 20 | Keyboard* GetKeyboard(); | 20 | Keyboard* GetKeyboard(); |
| 21 | 21 | ||
| 22 | class MotionEmu; | ||
| 23 | |||
| 24 | /// Gets the motion emulation factory. | ||
| 25 | MotionEmu* GetMotionEmu(); | ||
| 26 | |||
| 22 | /// Generates a serialized param package for creating a keyboard button device | 27 | /// Generates a serialized param package for creating a keyboard button device |
| 23 | std::string GenerateKeyboardParam(int key_code); | 28 | std::string GenerateKeyboardParam(int key_code); |
| 24 | 29 | ||
diff --git a/src/input_common/motion_emu.cpp b/src/input_common/motion_emu.cpp new file mode 100644 index 000000000..59a035e70 --- /dev/null +++ b/src/input_common/motion_emu.cpp | |||
| @@ -0,0 +1,168 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <chrono> | ||
| 6 | #include <mutex> | ||
| 7 | #include <thread> | ||
| 8 | #include <tuple> | ||
| 9 | #include "common/math_util.h" | ||
| 10 | #include "common/quaternion.h" | ||
| 11 | #include "common/thread.h" | ||
| 12 | #include "common/vector_math.h" | ||
| 13 | #include "input_common/motion_emu.h" | ||
| 14 | |||
| 15 | namespace InputCommon { | ||
| 16 | |||
| 17 | // Implementation class of the motion emulation device | ||
| 18 | class MotionEmuDevice { | ||
| 19 | public: | ||
| 20 | MotionEmuDevice(int update_millisecond, float sensitivity) | ||
| 21 | : update_millisecond(update_millisecond), | ||
| 22 | update_duration(std::chrono::duration_cast<std::chrono::steady_clock::duration>( | ||
| 23 | std::chrono::milliseconds(update_millisecond))), | ||
| 24 | sensitivity(sensitivity), motion_emu_thread(&MotionEmuDevice::MotionEmuThread, this) {} | ||
| 25 | |||
| 26 | ~MotionEmuDevice() { | ||
| 27 | if (motion_emu_thread.joinable()) { | ||
| 28 | shutdown_event.Set(); | ||
| 29 | motion_emu_thread.join(); | ||
| 30 | } | ||
| 31 | } | ||
| 32 | |||
| 33 | void BeginTilt(int x, int y) { | ||
| 34 | mouse_origin = Math::MakeVec(x, y); | ||
| 35 | is_tilting = true; | ||
| 36 | } | ||
| 37 | |||
| 38 | void Tilt(int x, int y) { | ||
| 39 | auto mouse_move = Math::MakeVec(x, y) - mouse_origin; | ||
| 40 | if (is_tilting) { | ||
| 41 | std::lock_guard<std::mutex> guard(tilt_mutex); | ||
| 42 | if (mouse_move.x == 0 && mouse_move.y == 0) { | ||
| 43 | tilt_angle = 0; | ||
| 44 | } else { | ||
| 45 | tilt_direction = mouse_move.Cast<float>(); | ||
| 46 | tilt_angle = MathUtil::Clamp(tilt_direction.Normalize() * sensitivity, 0.0f, | ||
| 47 | MathUtil::PI * 0.5f); | ||
| 48 | } | ||
| 49 | } | ||
| 50 | } | ||
| 51 | |||
| 52 | void EndTilt() { | ||
| 53 | std::lock_guard<std::mutex> guard(tilt_mutex); | ||
| 54 | tilt_angle = 0; | ||
| 55 | is_tilting = false; | ||
| 56 | } | ||
| 57 | |||
| 58 | std::tuple<Math::Vec3<float>, Math::Vec3<float>> GetStatus() { | ||
| 59 | std::lock_guard<std::mutex> guard(status_mutex); | ||
| 60 | return status; | ||
| 61 | } | ||
| 62 | |||
| 63 | private: | ||
| 64 | const int update_millisecond; | ||
| 65 | const std::chrono::steady_clock::duration update_duration; | ||
| 66 | const float sensitivity; | ||
| 67 | |||
| 68 | Math::Vec2<int> mouse_origin; | ||
| 69 | |||
| 70 | std::mutex tilt_mutex; | ||
| 71 | Math::Vec2<float> tilt_direction; | ||
| 72 | float tilt_angle = 0; | ||
| 73 | |||
| 74 | bool is_tilting = false; | ||
| 75 | |||
| 76 | Common::Event shutdown_event; | ||
| 77 | |||
| 78 | std::tuple<Math::Vec3<float>, Math::Vec3<float>> status; | ||
| 79 | std::mutex status_mutex; | ||
| 80 | |||
| 81 | // Note: always keep the thread declaration at the end so that other objects are initialized | ||
| 82 | // before this! | ||
| 83 | std::thread motion_emu_thread; | ||
| 84 | |||
| 85 | void MotionEmuThread() { | ||
| 86 | auto update_time = std::chrono::steady_clock::now(); | ||
| 87 | Math::Quaternion<float> q = MakeQuaternion(Math::Vec3<float>(), 0); | ||
| 88 | Math::Quaternion<float> old_q; | ||
| 89 | |||
| 90 | while (!shutdown_event.WaitUntil(update_time)) { | ||
| 91 | update_time += update_duration; | ||
| 92 | old_q = q; | ||
| 93 | |||
| 94 | { | ||
| 95 | std::lock_guard<std::mutex> guard(tilt_mutex); | ||
| 96 | |||
| 97 | // Find the quaternion describing current 3DS tilting | ||
| 98 | q = MakeQuaternion(Math::MakeVec(-tilt_direction.y, 0.0f, tilt_direction.x), | ||
| 99 | tilt_angle); | ||
| 100 | } | ||
| 101 | |||
| 102 | auto inv_q = q.Inverse(); | ||
| 103 | |||
| 104 | // Set the gravity vector in world space | ||
| 105 | auto gravity = Math::MakeVec(0.0f, -1.0f, 0.0f); | ||
| 106 | |||
| 107 | // Find the angular rate vector in world space | ||
| 108 | auto angular_rate = ((q - old_q) * inv_q).xyz * 2; | ||
| 109 | angular_rate *= 1000 / update_millisecond / MathUtil::PI * 180; | ||
| 110 | |||
| 111 | // Transform the two vectors from world space to 3DS space | ||
| 112 | gravity = QuaternionRotate(inv_q, gravity); | ||
| 113 | angular_rate = QuaternionRotate(inv_q, angular_rate); | ||
| 114 | |||
| 115 | // Update the sensor state | ||
| 116 | { | ||
| 117 | std::lock_guard<std::mutex> guard(status_mutex); | ||
| 118 | status = std::make_tuple(gravity, angular_rate); | ||
| 119 | } | ||
| 120 | } | ||
| 121 | } | ||
| 122 | }; | ||
| 123 | |||
| 124 | // Interface wrapper held by input receiver as a unique_ptr. It holds the implementation class as | ||
| 125 | // a shared_ptr, which is also observed by the factory class as a weak_ptr. In this way the factory | ||
| 126 | // can forward all the inputs to the implementation only when it is valid. | ||
| 127 | class MotionEmuDeviceWrapper : public Input::MotionDevice { | ||
| 128 | public: | ||
| 129 | MotionEmuDeviceWrapper(int update_millisecond, float sensitivity) { | ||
| 130 | device = std::make_shared<MotionEmuDevice>(update_millisecond, sensitivity); | ||
| 131 | } | ||
| 132 | |||
| 133 | std::tuple<Math::Vec3<float>, Math::Vec3<float>> GetStatus() const { | ||
| 134 | return device->GetStatus(); | ||
| 135 | } | ||
| 136 | |||
| 137 | std::shared_ptr<MotionEmuDevice> device; | ||
| 138 | }; | ||
| 139 | |||
| 140 | std::unique_ptr<Input::MotionDevice> MotionEmu::Create(const Common::ParamPackage& params) { | ||
| 141 | int update_period = params.Get("update_period", 100); | ||
| 142 | float sensitivity = params.Get("sensitivity", 0.01f); | ||
| 143 | auto device_wrapper = std::make_unique<MotionEmuDeviceWrapper>(update_period, sensitivity); | ||
| 144 | // Previously created device is disconnected here. Having two motion devices for 3DS is not | ||
| 145 | // expected. | ||
| 146 | current_device = device_wrapper->device; | ||
| 147 | return std::move(device_wrapper); | ||
| 148 | } | ||
| 149 | |||
| 150 | void MotionEmu::BeginTilt(int x, int y) { | ||
| 151 | if (auto ptr = current_device.lock()) { | ||
| 152 | ptr->BeginTilt(x, y); | ||
| 153 | } | ||
| 154 | } | ||
| 155 | |||
| 156 | void MotionEmu::Tilt(int x, int y) { | ||
| 157 | if (auto ptr = current_device.lock()) { | ||
| 158 | ptr->Tilt(x, y); | ||
| 159 | } | ||
| 160 | } | ||
| 161 | |||
| 162 | void MotionEmu::EndTilt() { | ||
| 163 | if (auto ptr = current_device.lock()) { | ||
| 164 | ptr->EndTilt(); | ||
| 165 | } | ||
| 166 | } | ||
| 167 | |||
| 168 | } // namespace InputCommon | ||
diff --git a/src/input_common/motion_emu.h b/src/input_common/motion_emu.h new file mode 100644 index 000000000..7a7e22467 --- /dev/null +++ b/src/input_common/motion_emu.h | |||
| @@ -0,0 +1,46 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include "core/frontend/input.h" | ||
| 8 | |||
| 9 | namespace InputCommon { | ||
| 10 | |||
| 11 | class MotionEmuDevice; | ||
| 12 | |||
| 13 | class MotionEmu : public Input::Factory<Input::MotionDevice> { | ||
| 14 | public: | ||
| 15 | /** | ||
| 16 | * Creates a motion device emulated from mouse input | ||
| 17 | * @param params contains parameters for creating the device: | ||
| 18 | * - "update_period": update period in milliseconds | ||
| 19 | * - "sensitivity": the coefficient converting mouse movement to tilting angle | ||
| 20 | */ | ||
| 21 | std::unique_ptr<Input::MotionDevice> Create(const Common::ParamPackage& params) override; | ||
| 22 | |||
| 23 | /** | ||
| 24 | * Signals that a motion sensor tilt has begun. | ||
| 25 | * @param x the x-coordinate of the cursor | ||
| 26 | * @param y the y-coordinate of the cursor | ||
| 27 | */ | ||
| 28 | void BeginTilt(int x, int y); | ||
| 29 | |||
| 30 | /** | ||
| 31 | * Signals that a motion sensor tilt is occurring. | ||
| 32 | * @param x the x-coordinate of the cursor | ||
| 33 | * @param y the y-coordinate of the cursor | ||
| 34 | */ | ||
| 35 | void Tilt(int x, int y); | ||
| 36 | |||
| 37 | /** | ||
| 38 | * Signals that a motion sensor tilt has ended. | ||
| 39 | */ | ||
| 40 | void EndTilt(); | ||
| 41 | |||
| 42 | private: | ||
| 43 | std::weak_ptr<MotionEmuDevice> current_device; | ||
| 44 | }; | ||
| 45 | |||
| 46 | } // namespace InputCommon | ||
diff --git a/src/input_common/sdl/sdl.cpp b/src/input_common/sdl/sdl.cpp index 756ee58b7..d404afa89 100644 --- a/src/input_common/sdl/sdl.cpp +++ b/src/input_common/sdl/sdl.cpp | |||
| @@ -159,7 +159,7 @@ public: | |||
| 159 | * - "axis"(optional): the index of the axis to bind | 159 | * - "axis"(optional): the index of the axis to bind |
| 160 | * - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", | 160 | * - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", |
| 161 | * "down", "left" or "right" | 161 | * "down", "left" or "right" |
| 162 | * - "threshould"(only used for axis): a float value in (-1.0, 1.0) which the button is | 162 | * - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is |
| 163 | * triggered if the axis value crosses | 163 | * triggered if the axis value crosses |
| 164 | * - "direction"(only used for axis): "+" means the button is triggered when the axis value | 164 | * - "direction"(only used for axis): "+" means the button is triggered when the axis value |
| 165 | * is greater than the threshold; "-" means the button is triggered when the axis value | 165 | * is greater than the threshold; "-" means the button is triggered when the axis value |
diff --git a/src/network/packet.cpp b/src/network/packet.cpp index 660e92c0d..7e1a812f3 100644 --- a/src/network/packet.cpp +++ b/src/network/packet.cpp | |||
| @@ -13,6 +13,18 @@ | |||
| 13 | 13 | ||
| 14 | namespace Network { | 14 | namespace Network { |
| 15 | 15 | ||
| 16 | #ifndef htonll | ||
| 17 | u64 htonll(u64 x) { | ||
| 18 | return ((1 == htonl(1)) ? (x) : ((uint64_t)htonl((x)&0xFFFFFFFF) << 32) | htonl((x) >> 32)); | ||
| 19 | } | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #ifndef ntohll | ||
| 23 | u64 ntohll(u64 x) { | ||
| 24 | return ((1 == ntohl(1)) ? (x) : ((uint64_t)ntohl((x)&0xFFFFFFFF) << 32) | ntohl((x) >> 32)); | ||
| 25 | } | ||
| 26 | #endif | ||
| 27 | |||
| 16 | void Packet::Append(const void* in_data, std::size_t size_in_bytes) { | 28 | void Packet::Append(const void* in_data, std::size_t size_in_bytes) { |
| 17 | if (in_data && (size_in_bytes > 0)) { | 29 | if (in_data && (size_in_bytes > 0)) { |
| 18 | std::size_t start = data.size(); | 30 | std::size_t start = data.size(); |
| @@ -100,6 +112,20 @@ Packet& Packet::operator>>(u32& out_data) { | |||
| 100 | return *this; | 112 | return *this; |
| 101 | } | 113 | } |
| 102 | 114 | ||
| 115 | Packet& Packet::operator>>(s64& out_data) { | ||
| 116 | s64 value; | ||
| 117 | Read(&value, sizeof(value)); | ||
| 118 | out_data = ntohll(value); | ||
| 119 | return *this; | ||
| 120 | } | ||
| 121 | |||
| 122 | Packet& Packet::operator>>(u64& out_data) { | ||
| 123 | u64 value; | ||
| 124 | Read(&value, sizeof(value)); | ||
| 125 | out_data = ntohll(value); | ||
| 126 | return *this; | ||
| 127 | } | ||
| 128 | |||
| 103 | Packet& Packet::operator>>(float& out_data) { | 129 | Packet& Packet::operator>>(float& out_data) { |
| 104 | Read(&out_data, sizeof(out_data)); | 130 | Read(&out_data, sizeof(out_data)); |
| 105 | return *this; | 131 | return *this; |
| @@ -183,6 +209,18 @@ Packet& Packet::operator<<(u32 in_data) { | |||
| 183 | return *this; | 209 | return *this; |
| 184 | } | 210 | } |
| 185 | 211 | ||
| 212 | Packet& Packet::operator<<(s64 in_data) { | ||
| 213 | s64 toWrite = htonll(in_data); | ||
| 214 | Append(&toWrite, sizeof(toWrite)); | ||
| 215 | return *this; | ||
| 216 | } | ||
| 217 | |||
| 218 | Packet& Packet::operator<<(u64 in_data) { | ||
| 219 | u64 toWrite = htonll(in_data); | ||
| 220 | Append(&toWrite, sizeof(toWrite)); | ||
| 221 | return *this; | ||
| 222 | } | ||
| 223 | |||
| 186 | Packet& Packet::operator<<(float in_data) { | 224 | Packet& Packet::operator<<(float in_data) { |
| 187 | Append(&in_data, sizeof(in_data)); | 225 | Append(&in_data, sizeof(in_data)); |
| 188 | return *this; | 226 | return *this; |
| @@ -195,7 +233,7 @@ Packet& Packet::operator<<(double in_data) { | |||
| 195 | 233 | ||
| 196 | Packet& Packet::operator<<(const char* in_data) { | 234 | Packet& Packet::operator<<(const char* in_data) { |
| 197 | // First insert string length | 235 | // First insert string length |
| 198 | u32 length = std::strlen(in_data); | 236 | u32 length = static_cast<u32>(std::strlen(in_data)); |
| 199 | *this << length; | 237 | *this << length; |
| 200 | 238 | ||
| 201 | // Then insert characters | 239 | // Then insert characters |
diff --git a/src/network/packet.h b/src/network/packet.h index 94b351ab1..5a2e58dc2 100644 --- a/src/network/packet.h +++ b/src/network/packet.h | |||
| @@ -72,6 +72,8 @@ public: | |||
| 72 | Packet& operator>>(u16& out_data); | 72 | Packet& operator>>(u16& out_data); |
| 73 | Packet& operator>>(s32& out_data); | 73 | Packet& operator>>(s32& out_data); |
| 74 | Packet& operator>>(u32& out_data); | 74 | Packet& operator>>(u32& out_data); |
| 75 | Packet& operator>>(s64& out_data); | ||
| 76 | Packet& operator>>(u64& out_data); | ||
| 75 | Packet& operator>>(float& out_data); | 77 | Packet& operator>>(float& out_data); |
| 76 | Packet& operator>>(double& out_data); | 78 | Packet& operator>>(double& out_data); |
| 77 | Packet& operator>>(char* out_data); | 79 | Packet& operator>>(char* out_data); |
| @@ -89,6 +91,8 @@ public: | |||
| 89 | Packet& operator<<(u16 in_data); | 91 | Packet& operator<<(u16 in_data); |
| 90 | Packet& operator<<(s32 in_data); | 92 | Packet& operator<<(s32 in_data); |
| 91 | Packet& operator<<(u32 in_data); | 93 | Packet& operator<<(u32 in_data); |
| 94 | Packet& operator<<(s64 in_data); | ||
| 95 | Packet& operator<<(u64 in_data); | ||
| 92 | Packet& operator<<(float in_data); | 96 | Packet& operator<<(float in_data); |
| 93 | Packet& operator<<(double in_data); | 97 | Packet& operator<<(double in_data); |
| 94 | Packet& operator<<(const char* in_data); | 98 | Packet& operator<<(const char* in_data); |
diff --git a/src/network/room.cpp b/src/network/room.cpp index 8b7915bb7..261049ab0 100644 --- a/src/network/room.cpp +++ b/src/network/room.cpp | |||
| @@ -4,9 +4,9 @@ | |||
| 4 | 4 | ||
| 5 | #include <algorithm> | 5 | #include <algorithm> |
| 6 | #include <atomic> | 6 | #include <atomic> |
| 7 | #include <mutex> | ||
| 7 | #include <random> | 8 | #include <random> |
| 8 | #include <thread> | 9 | #include <thread> |
| 9 | #include <vector> | ||
| 10 | #include "enet/enet.h" | 10 | #include "enet/enet.h" |
| 11 | #include "network/packet.h" | 11 | #include "network/packet.h" |
| 12 | #include "network/room.h" | 12 | #include "network/room.h" |
| @@ -19,7 +19,7 @@ static constexpr u32 MaxConcurrentConnections = 10; | |||
| 19 | class Room::RoomImpl { | 19 | class Room::RoomImpl { |
| 20 | public: | 20 | public: |
| 21 | // This MAC address is used to generate a 'Nintendo' like Mac address. | 21 | // This MAC address is used to generate a 'Nintendo' like Mac address. |
| 22 | const MacAddress NintendoOUI = {0x00, 0x1F, 0x32, 0x00, 0x00, 0x00}; | 22 | const MacAddress NintendoOUI; |
| 23 | std::mt19937 random_gen; ///< Random number generator. Used for GenerateMacAddress | 23 | std::mt19937 random_gen; ///< Random number generator. Used for GenerateMacAddress |
| 24 | 24 | ||
| 25 | ENetHost* server = nullptr; ///< Network interface. | 25 | ENetHost* server = nullptr; ///< Network interface. |
| @@ -29,14 +29,17 @@ public: | |||
| 29 | 29 | ||
| 30 | struct Member { | 30 | struct Member { |
| 31 | std::string nickname; ///< The nickname of the member. | 31 | std::string nickname; ///< The nickname of the member. |
| 32 | std::string game_name; ///< The current game of the member | 32 | GameInfo game_info; ///< The current game of the member |
| 33 | MacAddress mac_address; ///< The assigned mac address of the member. | 33 | MacAddress mac_address; ///< The assigned mac address of the member. |
| 34 | ENetPeer* peer; ///< The remote peer. | 34 | ENetPeer* peer; ///< The remote peer. |
| 35 | }; | 35 | }; |
| 36 | using MemberList = std::vector<Member>; | 36 | using MemberList = std::vector<Member>; |
| 37 | MemberList members; ///< Information about the members of this room. | 37 | MemberList members; ///< Information about the members of this room |
| 38 | mutable std::mutex member_mutex; ///< Mutex for locking the members list | ||
| 39 | /// This should be a std::shared_mutex as soon as C++17 is supported | ||
| 38 | 40 | ||
| 39 | RoomImpl() : random_gen(std::random_device()()) {} | 41 | RoomImpl() |
| 42 | : random_gen(std::random_device()()), NintendoOUI{0x00, 0x1F, 0x32, 0x00, 0x00, 0x00} {} | ||
| 40 | 43 | ||
| 41 | /// Thread that receives and dispatches network packets | 44 | /// Thread that receives and dispatches network packets |
| 42 | std::unique_ptr<std::thread> room_thread; | 45 | std::unique_ptr<std::thread> room_thread; |
| @@ -146,7 +149,7 @@ void Room::RoomImpl::ServerLoop() { | |||
| 146 | case IdJoinRequest: | 149 | case IdJoinRequest: |
| 147 | HandleJoinRequest(&event); | 150 | HandleJoinRequest(&event); |
| 148 | break; | 151 | break; |
| 149 | case IdSetGameName: | 152 | case IdSetGameInfo: |
| 150 | HandleGameNamePacket(&event); | 153 | HandleGameNamePacket(&event); |
| 151 | break; | 154 | break; |
| 152 | case IdWifiPacket: | 155 | case IdWifiPacket: |
| @@ -212,7 +215,10 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) { | |||
| 212 | member.nickname = nickname; | 215 | member.nickname = nickname; |
| 213 | member.peer = event->peer; | 216 | member.peer = event->peer; |
| 214 | 217 | ||
| 215 | members.push_back(std::move(member)); | 218 | { |
| 219 | std::lock_guard<std::mutex> lock(member_mutex); | ||
| 220 | members.push_back(std::move(member)); | ||
| 221 | } | ||
| 216 | 222 | ||
| 217 | // Notify everyone that the room information has changed. | 223 | // Notify everyone that the room information has changed. |
| 218 | BroadcastRoomInformation(); | 224 | BroadcastRoomInformation(); |
| @@ -222,12 +228,14 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) { | |||
| 222 | bool Room::RoomImpl::IsValidNickname(const std::string& nickname) const { | 228 | bool Room::RoomImpl::IsValidNickname(const std::string& nickname) const { |
| 223 | // A nickname is valid if it is not already taken by anybody else in the room. | 229 | // A nickname is valid if it is not already taken by anybody else in the room. |
| 224 | // TODO(B3N30): Check for empty names, spaces, etc. | 230 | // TODO(B3N30): Check for empty names, spaces, etc. |
| 231 | std::lock_guard<std::mutex> lock(member_mutex); | ||
| 225 | return std::all_of(members.begin(), members.end(), | 232 | return std::all_of(members.begin(), members.end(), |
| 226 | [&nickname](const auto& member) { return member.nickname != nickname; }); | 233 | [&nickname](const auto& member) { return member.nickname != nickname; }); |
| 227 | } | 234 | } |
| 228 | 235 | ||
| 229 | bool Room::RoomImpl::IsValidMacAddress(const MacAddress& address) const { | 236 | bool Room::RoomImpl::IsValidMacAddress(const MacAddress& address) const { |
| 230 | // A MAC address is valid if it is not already taken by anybody else in the room. | 237 | // A MAC address is valid if it is not already taken by anybody else in the room. |
| 238 | std::lock_guard<std::mutex> lock(member_mutex); | ||
| 231 | return std::all_of(members.begin(), members.end(), | 239 | return std::all_of(members.begin(), members.end(), |
| 232 | [&address](const auto& member) { return member.mac_address != address; }); | 240 | [&address](const auto& member) { return member.mac_address != address; }); |
| 233 | } | 241 | } |
| @@ -278,6 +286,7 @@ void Room::RoomImpl::SendCloseMessage() { | |||
| 278 | packet << static_cast<u8>(IdCloseRoom); | 286 | packet << static_cast<u8>(IdCloseRoom); |
| 279 | ENetPacket* enet_packet = | 287 | ENetPacket* enet_packet = |
| 280 | enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); | 288 | enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); |
| 289 | std::lock_guard<std::mutex> lock(member_mutex); | ||
| 281 | for (auto& member : members) { | 290 | for (auto& member : members) { |
| 282 | enet_peer_send(member.peer, 0, enet_packet); | 291 | enet_peer_send(member.peer, 0, enet_packet); |
| 283 | } | 292 | } |
| @@ -294,10 +303,14 @@ void Room::RoomImpl::BroadcastRoomInformation() { | |||
| 294 | packet << room_information.member_slots; | 303 | packet << room_information.member_slots; |
| 295 | 304 | ||
| 296 | packet << static_cast<u32>(members.size()); | 305 | packet << static_cast<u32>(members.size()); |
| 297 | for (const auto& member : members) { | 306 | { |
| 298 | packet << member.nickname; | 307 | std::lock_guard<std::mutex> lock(member_mutex); |
| 299 | packet << member.mac_address; | 308 | for (const auto& member : members) { |
| 300 | packet << member.game_name; | 309 | packet << member.nickname; |
| 310 | packet << member.mac_address; | ||
| 311 | packet << member.game_info.name; | ||
| 312 | packet << member.game_info.id; | ||
| 313 | } | ||
| 301 | } | 314 | } |
| 302 | 315 | ||
| 303 | ENetPacket* enet_packet = | 316 | ENetPacket* enet_packet = |
| @@ -334,11 +347,13 @@ void Room::RoomImpl::HandleWifiPacket(const ENetEvent* event) { | |||
| 334 | ENET_PACKET_FLAG_RELIABLE); | 347 | ENET_PACKET_FLAG_RELIABLE); |
| 335 | 348 | ||
| 336 | if (destination_address == BroadcastMac) { // Send the data to everyone except the sender | 349 | if (destination_address == BroadcastMac) { // Send the data to everyone except the sender |
| 350 | std::lock_guard<std::mutex> lock(member_mutex); | ||
| 337 | for (const auto& member : members) { | 351 | for (const auto& member : members) { |
| 338 | if (member.peer != event->peer) | 352 | if (member.peer != event->peer) |
| 339 | enet_peer_send(member.peer, 0, enet_packet); | 353 | enet_peer_send(member.peer, 0, enet_packet); |
| 340 | } | 354 | } |
| 341 | } else { // Send the data only to the destination client | 355 | } else { // Send the data only to the destination client |
| 356 | std::lock_guard<std::mutex> lock(member_mutex); | ||
| 342 | auto member = std::find_if(members.begin(), members.end(), | 357 | auto member = std::find_if(members.begin(), members.end(), |
| 343 | [destination_address](const Member& member) -> bool { | 358 | [destination_address](const Member& member) -> bool { |
| 344 | return member.mac_address == destination_address; | 359 | return member.mac_address == destination_address; |
| @@ -360,6 +375,8 @@ void Room::RoomImpl::HandleChatPacket(const ENetEvent* event) { | |||
| 360 | auto CompareNetworkAddress = [event](const Member member) -> bool { | 375 | auto CompareNetworkAddress = [event](const Member member) -> bool { |
| 361 | return member.peer == event->peer; | 376 | return member.peer == event->peer; |
| 362 | }; | 377 | }; |
| 378 | |||
| 379 | std::lock_guard<std::mutex> lock(member_mutex); | ||
| 363 | const auto sending_member = std::find_if(members.begin(), members.end(), CompareNetworkAddress); | 380 | const auto sending_member = std::find_if(members.begin(), members.end(), CompareNetworkAddress); |
| 364 | if (sending_member == members.end()) { | 381 | if (sending_member == members.end()) { |
| 365 | return; // Received a chat message from a unknown sender | 382 | return; // Received a chat message from a unknown sender |
| @@ -384,22 +401,32 @@ void Room::RoomImpl::HandleGameNamePacket(const ENetEvent* event) { | |||
| 384 | in_packet.Append(event->packet->data, event->packet->dataLength); | 401 | in_packet.Append(event->packet->data, event->packet->dataLength); |
| 385 | 402 | ||
| 386 | in_packet.IgnoreBytes(sizeof(u8)); // Igonore the message type | 403 | in_packet.IgnoreBytes(sizeof(u8)); // Igonore the message type |
| 387 | std::string game_name; | 404 | GameInfo game_info; |
| 388 | in_packet >> game_name; | 405 | in_packet >> game_info.name; |
| 389 | auto member = | 406 | in_packet >> game_info.id; |
| 390 | std::find_if(members.begin(), members.end(), | 407 | |
| 391 | [event](const Member& member) -> bool { return member.peer == event->peer; }); | 408 | { |
| 392 | if (member != members.end()) { | 409 | std::lock_guard<std::mutex> lock(member_mutex); |
| 393 | member->game_name = game_name; | 410 | auto member = |
| 394 | BroadcastRoomInformation(); | 411 | std::find_if(members.begin(), members.end(), [event](const Member& member) -> bool { |
| 412 | return member.peer == event->peer; | ||
| 413 | }); | ||
| 414 | if (member != members.end()) { | ||
| 415 | member->game_info = game_info; | ||
| 416 | } | ||
| 395 | } | 417 | } |
| 418 | BroadcastRoomInformation(); | ||
| 396 | } | 419 | } |
| 397 | 420 | ||
| 398 | void Room::RoomImpl::HandleClientDisconnection(ENetPeer* client) { | 421 | void Room::RoomImpl::HandleClientDisconnection(ENetPeer* client) { |
| 399 | // Remove the client from the members list. | 422 | // Remove the client from the members list. |
| 400 | members.erase(std::remove_if(members.begin(), members.end(), | 423 | { |
| 401 | [client](const Member& member) { return member.peer == client; }), | 424 | std::lock_guard<std::mutex> lock(member_mutex); |
| 402 | members.end()); | 425 | members.erase( |
| 426 | std::remove_if(members.begin(), members.end(), | ||
| 427 | [client](const Member& member) { return member.peer == client; }), | ||
| 428 | members.end()); | ||
| 429 | } | ||
| 403 | 430 | ||
| 404 | // Announce the change to all clients. | 431 | // Announce the change to all clients. |
| 405 | enet_peer_disconnect(client, 0); | 432 | enet_peer_disconnect(client, 0); |
| @@ -436,6 +463,19 @@ const RoomInformation& Room::GetRoomInformation() const { | |||
| 436 | return room_impl->room_information; | 463 | return room_impl->room_information; |
| 437 | } | 464 | } |
| 438 | 465 | ||
| 466 | std::vector<Room::Member> Room::GetRoomMemberList() const { | ||
| 467 | std::vector<Room::Member> member_list; | ||
| 468 | std::lock_guard<std::mutex> lock(room_impl->member_mutex); | ||
| 469 | for (const auto& member_impl : room_impl->members) { | ||
| 470 | Member member; | ||
| 471 | member.nickname = member_impl.nickname; | ||
| 472 | member.mac_address = member_impl.mac_address; | ||
| 473 | member.game_info = member_impl.game_info; | ||
| 474 | member_list.push_back(member); | ||
| 475 | } | ||
| 476 | return member_list; | ||
| 477 | }; | ||
| 478 | |||
| 439 | void Room::Destroy() { | 479 | void Room::Destroy() { |
| 440 | room_impl->state = State::Closed; | 480 | room_impl->state = State::Closed; |
| 441 | room_impl->room_thread->join(); | 481 | room_impl->room_thread->join(); |
| @@ -446,7 +486,10 @@ void Room::Destroy() { | |||
| 446 | } | 486 | } |
| 447 | room_impl->room_information = {}; | 487 | room_impl->room_information = {}; |
| 448 | room_impl->server = nullptr; | 488 | room_impl->server = nullptr; |
| 449 | room_impl->members.clear(); | 489 | { |
| 490 | std::lock_guard<std::mutex> lock(room_impl->member_mutex); | ||
| 491 | room_impl->members.clear(); | ||
| 492 | } | ||
| 450 | room_impl->room_information.member_slots = 0; | 493 | room_impl->room_information.member_slots = 0; |
| 451 | room_impl->room_information.name.clear(); | 494 | room_impl->room_information.name.clear(); |
| 452 | } | 495 | } |
diff --git a/src/network/room.h b/src/network/room.h index 54cccf0ae..8285a4d0c 100644 --- a/src/network/room.h +++ b/src/network/room.h | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <array> | 7 | #include <array> |
| 8 | #include <memory> | 8 | #include <memory> |
| 9 | #include <string> | 9 | #include <string> |
| 10 | #include <vector> | ||
| 10 | #include "common/common_types.h" | 11 | #include "common/common_types.h" |
| 11 | 12 | ||
| 12 | namespace Network { | 13 | namespace Network { |
| @@ -21,10 +22,15 @@ struct RoomInformation { | |||
| 21 | u32 member_slots; ///< Maximum number of members in this room | 22 | u32 member_slots; ///< Maximum number of members in this room |
| 22 | }; | 23 | }; |
| 23 | 24 | ||
| 25 | struct GameInfo { | ||
| 26 | std::string name{""}; | ||
| 27 | u64 id{0}; | ||
| 28 | }; | ||
| 29 | |||
| 24 | using MacAddress = std::array<u8, 6>; | 30 | using MacAddress = std::array<u8, 6>; |
| 25 | /// A special MAC address that tells the room we're joining to assign us a MAC address | 31 | /// A special MAC address that tells the room we're joining to assign us a MAC address |
| 26 | /// automatically. | 32 | /// automatically. |
| 27 | const MacAddress NoPreferredMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; | 33 | constexpr MacAddress NoPreferredMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; |
| 28 | 34 | ||
| 29 | // 802.11 broadcast MAC address | 35 | // 802.11 broadcast MAC address |
| 30 | constexpr MacAddress BroadcastMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; | 36 | constexpr MacAddress BroadcastMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; |
| @@ -34,7 +40,7 @@ enum RoomMessageTypes : u8 { | |||
| 34 | IdJoinRequest = 1, | 40 | IdJoinRequest = 1, |
| 35 | IdJoinSuccess, | 41 | IdJoinSuccess, |
| 36 | IdRoomInformation, | 42 | IdRoomInformation, |
| 37 | IdSetGameName, | 43 | IdSetGameInfo, |
| 38 | IdWifiPacket, | 44 | IdWifiPacket, |
| 39 | IdChatMessage, | 45 | IdChatMessage, |
| 40 | IdNameCollision, | 46 | IdNameCollision, |
| @@ -51,6 +57,12 @@ public: | |||
| 51 | Closed, ///< The room is not opened and can not accept connections. | 57 | Closed, ///< The room is not opened and can not accept connections. |
| 52 | }; | 58 | }; |
| 53 | 59 | ||
| 60 | struct Member { | ||
| 61 | std::string nickname; ///< The nickname of the member. | ||
| 62 | GameInfo game_info; ///< The current game of the member | ||
| 63 | MacAddress mac_address; ///< The assigned mac address of the member. | ||
| 64 | }; | ||
| 65 | |||
| 54 | Room(); | 66 | Room(); |
| 55 | ~Room(); | 67 | ~Room(); |
| 56 | 68 | ||
| @@ -65,6 +77,11 @@ public: | |||
| 65 | const RoomInformation& GetRoomInformation() const; | 77 | const RoomInformation& GetRoomInformation() const; |
| 66 | 78 | ||
| 67 | /** | 79 | /** |
| 80 | * Gets a list of the mbmers connected to the room. | ||
| 81 | */ | ||
| 82 | std::vector<Member> GetRoomMemberList() const; | ||
| 83 | |||
| 84 | /** | ||
| 68 | * Creates the socket for this room. Will bind to default address if | 85 | * Creates the socket for this room. Will bind to default address if |
| 69 | * server is empty string. | 86 | * server is empty string. |
| 70 | */ | 87 | */ |
diff --git a/src/network/room_member.cpp b/src/network/room_member.cpp index dac9bacae..f229ec6fd 100644 --- a/src/network/room_member.cpp +++ b/src/network/room_member.cpp | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #include <atomic> | 5 | #include <atomic> |
| 6 | #include <list> | 6 | #include <list> |
| 7 | #include <mutex> | 7 | #include <mutex> |
| 8 | #include <set> | ||
| 8 | #include <thread> | 9 | #include <thread> |
| 9 | #include "common/assert.h" | 10 | #include "common/assert.h" |
| 10 | #include "enet/enet.h" | 11 | #include "enet/enet.h" |
| @@ -25,6 +26,9 @@ public: | |||
| 25 | /// Information about the room we're connected to. | 26 | /// Information about the room we're connected to. |
| 26 | RoomInformation room_information; | 27 | RoomInformation room_information; |
| 27 | 28 | ||
| 29 | /// The current game name, id and version | ||
| 30 | GameInfo current_game_info; | ||
| 31 | |||
| 28 | std::atomic<State> state{State::Idle}; ///< Current state of the RoomMember. | 32 | std::atomic<State> state{State::Idle}; ///< Current state of the RoomMember. |
| 29 | void SetState(const State new_state); | 33 | void SetState(const State new_state); |
| 30 | bool IsConnected() const; | 34 | bool IsConnected() const; |
| @@ -37,6 +41,24 @@ public: | |||
| 37 | std::unique_ptr<std::thread> loop_thread; | 41 | std::unique_ptr<std::thread> loop_thread; |
| 38 | std::mutex send_list_mutex; ///< Mutex that controls access to the `send_list` variable. | 42 | std::mutex send_list_mutex; ///< Mutex that controls access to the `send_list` variable. |
| 39 | std::list<Packet> send_list; ///< A list that stores all packets to send the async | 43 | std::list<Packet> send_list; ///< A list that stores all packets to send the async |
| 44 | |||
| 45 | template <typename T> | ||
| 46 | using CallbackSet = std::set<CallbackHandle<T>>; | ||
| 47 | std::mutex callback_mutex; ///< The mutex used for handling callbacks | ||
| 48 | |||
| 49 | class Callbacks { | ||
| 50 | public: | ||
| 51 | template <typename T> | ||
| 52 | CallbackSet<T>& Get(); | ||
| 53 | |||
| 54 | private: | ||
| 55 | CallbackSet<WifiPacket> callback_set_wifi_packet; | ||
| 56 | CallbackSet<ChatEntry> callback_set_chat_messages; | ||
| 57 | CallbackSet<RoomInformation> callback_set_room_information; | ||
| 58 | CallbackSet<State> callback_set_state; | ||
| 59 | }; | ||
| 60 | Callbacks callbacks; ///< All CallbackSets to all events | ||
| 61 | |||
| 40 | void MemberLoop(); | 62 | void MemberLoop(); |
| 41 | 63 | ||
| 42 | void StartLoop(); | 64 | void StartLoop(); |
| @@ -84,12 +106,20 @@ public: | |||
| 84 | * Disconnects the RoomMember from the Room | 106 | * Disconnects the RoomMember from the Room |
| 85 | */ | 107 | */ |
| 86 | void Disconnect(); | 108 | void Disconnect(); |
| 109 | |||
| 110 | template <typename T> | ||
| 111 | void Invoke(const T& data); | ||
| 112 | |||
| 113 | template <typename T> | ||
| 114 | CallbackHandle<T> Bind(std::function<void(const T&)> callback); | ||
| 87 | }; | 115 | }; |
| 88 | 116 | ||
| 89 | // RoomMemberImpl | 117 | // RoomMemberImpl |
| 90 | void RoomMember::RoomMemberImpl::SetState(const State new_state) { | 118 | void RoomMember::RoomMemberImpl::SetState(const State new_state) { |
| 91 | state = new_state; | 119 | if (state != new_state) { |
| 92 | // TODO(B3N30): Invoke the callback functions | 120 | state = new_state; |
| 121 | Invoke<State>(state); | ||
| 122 | } | ||
| 93 | } | 123 | } |
| 94 | 124 | ||
| 95 | bool RoomMember::RoomMemberImpl::IsConnected() const { | 125 | bool RoomMember::RoomMemberImpl::IsConnected() const { |
| @@ -195,9 +225,10 @@ void RoomMember::RoomMemberImpl::HandleRoomInformationPacket(const ENetEvent* ev | |||
| 195 | for (auto& member : member_information) { | 225 | for (auto& member : member_information) { |
| 196 | packet >> member.nickname; | 226 | packet >> member.nickname; |
| 197 | packet >> member.mac_address; | 227 | packet >> member.mac_address; |
| 198 | packet >> member.game_name; | 228 | packet >> member.game_info.name; |
| 229 | packet >> member.game_info.id; | ||
| 199 | } | 230 | } |
| 200 | // TODO(B3N30): Invoke callbacks | 231 | Invoke(room_information); |
| 201 | } | 232 | } |
| 202 | 233 | ||
| 203 | void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) { | 234 | void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) { |
| @@ -209,7 +240,7 @@ void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) { | |||
| 209 | 240 | ||
| 210 | // Parse the MAC Address from the packet | 241 | // Parse the MAC Address from the packet |
| 211 | packet >> mac_address; | 242 | packet >> mac_address; |
| 212 | // TODO(B3N30): Invoke callbacks | 243 | SetState(State::Joined); |
| 213 | } | 244 | } |
| 214 | 245 | ||
| 215 | void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) { | 246 | void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) { |
| @@ -235,7 +266,7 @@ void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) { | |||
| 235 | 266 | ||
| 236 | packet >> wifi_packet.data; | 267 | packet >> wifi_packet.data; |
| 237 | 268 | ||
| 238 | // TODO(B3N30): Invoke callbacks | 269 | Invoke<WifiPacket>(wifi_packet); |
| 239 | } | 270 | } |
| 240 | 271 | ||
| 241 | void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { | 272 | void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { |
| @@ -248,7 +279,7 @@ void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { | |||
| 248 | ChatEntry chat_entry{}; | 279 | ChatEntry chat_entry{}; |
| 249 | packet >> chat_entry.nickname; | 280 | packet >> chat_entry.nickname; |
| 250 | packet >> chat_entry.message; | 281 | packet >> chat_entry.message; |
| 251 | // TODO(B3N30): Invoke callbacks | 282 | Invoke<ChatEntry>(chat_entry); |
| 252 | } | 283 | } |
| 253 | 284 | ||
| 254 | void RoomMember::RoomMemberImpl::Disconnect() { | 285 | void RoomMember::RoomMemberImpl::Disconnect() { |
| @@ -276,6 +307,46 @@ void RoomMember::RoomMemberImpl::Disconnect() { | |||
| 276 | server = nullptr; | 307 | server = nullptr; |
| 277 | } | 308 | } |
| 278 | 309 | ||
| 310 | template <> | ||
| 311 | RoomMember::RoomMemberImpl::CallbackSet<WifiPacket>& RoomMember::RoomMemberImpl::Callbacks::Get() { | ||
| 312 | return callback_set_wifi_packet; | ||
| 313 | } | ||
| 314 | |||
| 315 | template <> | ||
| 316 | RoomMember::RoomMemberImpl::CallbackSet<RoomMember::State>& | ||
| 317 | RoomMember::RoomMemberImpl::Callbacks::Get() { | ||
| 318 | return callback_set_state; | ||
| 319 | } | ||
| 320 | |||
| 321 | template <> | ||
| 322 | RoomMember::RoomMemberImpl::CallbackSet<RoomInformation>& | ||
| 323 | RoomMember::RoomMemberImpl::Callbacks::Get() { | ||
| 324 | return callback_set_room_information; | ||
| 325 | } | ||
| 326 | |||
| 327 | template <> | ||
| 328 | RoomMember::RoomMemberImpl::CallbackSet<ChatEntry>& RoomMember::RoomMemberImpl::Callbacks::Get() { | ||
| 329 | return callback_set_chat_messages; | ||
| 330 | } | ||
| 331 | |||
| 332 | template <typename T> | ||
| 333 | void RoomMember::RoomMemberImpl::Invoke(const T& data) { | ||
| 334 | std::lock_guard<std::mutex> lock(callback_mutex); | ||
| 335 | CallbackSet<T> callback_set = callbacks.Get<T>(); | ||
| 336 | for (auto const& callback : callback_set) | ||
| 337 | (*callback)(data); | ||
| 338 | } | ||
| 339 | |||
| 340 | template <typename T> | ||
| 341 | RoomMember::CallbackHandle<T> RoomMember::RoomMemberImpl::Bind( | ||
| 342 | std::function<void(const T&)> callback) { | ||
| 343 | std::lock_guard<std::mutex> lock(callback_mutex); | ||
| 344 | CallbackHandle<T> handle; | ||
| 345 | handle = std::make_shared<std::function<void(const T&)>>(callback); | ||
| 346 | callbacks.Get<T>().insert(handle); | ||
| 347 | return handle; | ||
| 348 | } | ||
| 349 | |||
| 279 | // RoomMember | 350 | // RoomMember |
| 280 | RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} { | 351 | RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} { |
| 281 | room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0); | 352 | room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0); |
| @@ -339,6 +410,7 @@ void RoomMember::Join(const std::string& nick, const char* server_addr, u16 serv | |||
| 339 | room_member_impl->SetState(State::Joining); | 410 | room_member_impl->SetState(State::Joining); |
| 340 | room_member_impl->StartLoop(); | 411 | room_member_impl->StartLoop(); |
| 341 | room_member_impl->SendJoinRequest(nick, preferred_mac); | 412 | room_member_impl->SendJoinRequest(nick, preferred_mac); |
| 413 | SendGameInfo(room_member_impl->current_game_info); | ||
| 342 | } else { | 414 | } else { |
| 343 | room_member_impl->SetState(State::CouldNotConnect); | 415 | room_member_impl->SetState(State::CouldNotConnect); |
| 344 | } | 416 | } |
| @@ -366,17 +438,53 @@ void RoomMember::SendChatMessage(const std::string& message) { | |||
| 366 | room_member_impl->Send(std::move(packet)); | 438 | room_member_impl->Send(std::move(packet)); |
| 367 | } | 439 | } |
| 368 | 440 | ||
| 369 | void RoomMember::SendGameName(const std::string& game_name) { | 441 | void RoomMember::SendGameInfo(const GameInfo& game_info) { |
| 442 | room_member_impl->current_game_info = game_info; | ||
| 443 | if (!IsConnected()) | ||
| 444 | return; | ||
| 445 | |||
| 370 | Packet packet; | 446 | Packet packet; |
| 371 | packet << static_cast<u8>(IdSetGameName); | 447 | packet << static_cast<u8>(IdSetGameInfo); |
| 372 | packet << game_name; | 448 | packet << game_info.name; |
| 449 | packet << game_info.id; | ||
| 373 | room_member_impl->Send(std::move(packet)); | 450 | room_member_impl->Send(std::move(packet)); |
| 374 | } | 451 | } |
| 375 | 452 | ||
| 453 | RoomMember::CallbackHandle<RoomMember::State> RoomMember::BindOnStateChanged( | ||
| 454 | std::function<void(const RoomMember::State&)> callback) { | ||
| 455 | return room_member_impl->Bind(callback); | ||
| 456 | } | ||
| 457 | |||
| 458 | RoomMember::CallbackHandle<WifiPacket> RoomMember::BindOnWifiPacketReceived( | ||
| 459 | std::function<void(const WifiPacket&)> callback) { | ||
| 460 | return room_member_impl->Bind(callback); | ||
| 461 | } | ||
| 462 | |||
| 463 | RoomMember::CallbackHandle<RoomInformation> RoomMember::BindOnRoomInformationChanged( | ||
| 464 | std::function<void(const RoomInformation&)> callback) { | ||
| 465 | return room_member_impl->Bind(callback); | ||
| 466 | } | ||
| 467 | |||
| 468 | RoomMember::CallbackHandle<ChatEntry> RoomMember::BindOnChatMessageRecieved( | ||
| 469 | std::function<void(const ChatEntry&)> callback) { | ||
| 470 | return room_member_impl->Bind(callback); | ||
| 471 | } | ||
| 472 | |||
| 473 | template <typename T> | ||
| 474 | void RoomMember::Unbind(CallbackHandle<T> handle) { | ||
| 475 | std::lock_guard<std::mutex> lock(room_member_impl->callback_mutex); | ||
| 476 | room_member_impl->callbacks.Get<T>().erase(handle); | ||
| 477 | } | ||
| 478 | |||
| 376 | void RoomMember::Leave() { | 479 | void RoomMember::Leave() { |
| 377 | room_member_impl->SetState(State::Idle); | 480 | room_member_impl->SetState(State::Idle); |
| 378 | room_member_impl->loop_thread->join(); | 481 | room_member_impl->loop_thread->join(); |
| 379 | room_member_impl->loop_thread.reset(); | 482 | room_member_impl->loop_thread.reset(); |
| 380 | } | 483 | } |
| 381 | 484 | ||
| 485 | template void RoomMember::Unbind(CallbackHandle<WifiPacket>); | ||
| 486 | template void RoomMember::Unbind(CallbackHandle<RoomMember::State>); | ||
| 487 | template void RoomMember::Unbind(CallbackHandle<RoomInformation>); | ||
| 488 | template void RoomMember::Unbind(CallbackHandle<ChatEntry>); | ||
| 489 | |||
| 382 | } // namespace Network | 490 | } // namespace Network |
diff --git a/src/network/room_member.h b/src/network/room_member.h index bc1af3a7e..98770a234 100644 --- a/src/network/room_member.h +++ b/src/network/room_member.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <functional> | ||
| 7 | #include <memory> | 8 | #include <memory> |
| 8 | #include <string> | 9 | #include <string> |
| 9 | #include <vector> | 10 | #include <vector> |
| @@ -53,12 +54,23 @@ public: | |||
| 53 | 54 | ||
| 54 | struct MemberInformation { | 55 | struct MemberInformation { |
| 55 | std::string nickname; ///< Nickname of the member. | 56 | std::string nickname; ///< Nickname of the member. |
| 56 | std::string game_name; ///< Name of the game they're currently playing, or empty if they're | 57 | GameInfo game_info; ///< Name of the game they're currently playing, or empty if they're |
| 57 | /// not playing anything. | 58 | /// not playing anything. |
| 58 | MacAddress mac_address; ///< MAC address associated with this member. | 59 | MacAddress mac_address; ///< MAC address associated with this member. |
| 59 | }; | 60 | }; |
| 60 | using MemberList = std::vector<MemberInformation>; | 61 | using MemberList = std::vector<MemberInformation>; |
| 61 | 62 | ||
| 63 | // The handle for the callback functions | ||
| 64 | template <typename T> | ||
| 65 | using CallbackHandle = std::shared_ptr<std::function<void(const T&)>>; | ||
| 66 | |||
| 67 | /** | ||
| 68 | * Unbinds a callback function from the events. | ||
| 69 | * @param handle The connection handle to disconnect | ||
| 70 | */ | ||
| 71 | template <typename T> | ||
| 72 | void Unbind(CallbackHandle<T> handle); | ||
| 73 | |||
| 62 | RoomMember(); | 74 | RoomMember(); |
| 63 | ~RoomMember(); | 75 | ~RoomMember(); |
| 64 | 76 | ||
| @@ -113,10 +125,49 @@ public: | |||
| 113 | void SendChatMessage(const std::string& message); | 125 | void SendChatMessage(const std::string& message); |
| 114 | 126 | ||
| 115 | /** | 127 | /** |
| 116 | * Sends the current game name to the room. | 128 | * Sends the current game info to the room. |
| 117 | * @param game_name The game name. | 129 | * @param game_info The game information. |
| 130 | */ | ||
| 131 | void SendGameInfo(const GameInfo& game_info); | ||
| 132 | |||
| 133 | /** | ||
| 134 | * Binds a function to an event that will be triggered every time the State of the member | ||
| 135 | * changed. The function wil be called every time the event is triggered. The callback function | ||
| 136 | * must not bind or unbind a function. Doing so will cause a deadlock | ||
| 137 | * @param callback The function to call | ||
| 138 | * @return A handle used for removing the function from the registered list | ||
| 139 | */ | ||
| 140 | CallbackHandle<State> BindOnStateChanged(std::function<void(const State&)> callback); | ||
| 141 | |||
| 142 | /** | ||
| 143 | * Binds a function to an event that will be triggered every time a WifiPacket is received. | ||
| 144 | * The function wil be called everytime the event is triggered. | ||
| 145 | * The callback function must not bind or unbind a function. Doing so will cause a deadlock | ||
| 146 | * @param callback The function to call | ||
| 147 | * @return A handle used for removing the function from the registered list | ||
| 148 | */ | ||
| 149 | CallbackHandle<WifiPacket> BindOnWifiPacketReceived( | ||
| 150 | std::function<void(const WifiPacket&)> callback); | ||
| 151 | |||
| 152 | /** | ||
| 153 | * Binds a function to an event that will be triggered every time the RoomInformation changes. | ||
| 154 | * The function wil be called every time the event is triggered. | ||
| 155 | * The callback function must not bind or unbind a function. Doing so will cause a deadlock | ||
| 156 | * @param callback The function to call | ||
| 157 | * @return A handle used for removing the function from the registered list | ||
| 158 | */ | ||
| 159 | CallbackHandle<RoomInformation> BindOnRoomInformationChanged( | ||
| 160 | std::function<void(const RoomInformation&)> callback); | ||
| 161 | |||
| 162 | /** | ||
| 163 | * Binds a function to an event that will be triggered every time a ChatMessage is received. | ||
| 164 | * The function wil be called every time the event is triggered. | ||
| 165 | * The callback function must not bind or unbind a function. Doing so will cause a deadlock | ||
| 166 | * @param callback The function to call | ||
| 167 | * @return A handle used for removing the function from the registered list | ||
| 118 | */ | 168 | */ |
| 119 | void SendGameName(const std::string& game_name); | 169 | CallbackHandle<ChatEntry> BindOnChatMessageRecieved( |
| 170 | std::function<void(const ChatEntry&)> callback); | ||
| 120 | 171 | ||
| 121 | /** | 172 | /** |
| 122 | * Leaves the current room. | 173 | * Leaves the current room. |
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index a14df325a..1aac0daa2 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt | |||
| @@ -1,12 +1,16 @@ | |||
| 1 | set(SRCS | 1 | set(SRCS |
| 2 | common/param_package.cpp | 2 | common/param_package.cpp |
| 3 | core/arm/arm_test_common.cpp | ||
| 4 | core/arm/dyncom/arm_dyncom_vfp_tests.cpp | ||
| 3 | core/file_sys/path_parser.cpp | 5 | core/file_sys/path_parser.cpp |
| 4 | core/hle/kernel/hle_ipc.cpp | 6 | core/hle/kernel/hle_ipc.cpp |
| 7 | core/memory/memory.cpp | ||
| 5 | glad.cpp | 8 | glad.cpp |
| 6 | tests.cpp | 9 | tests.cpp |
| 7 | ) | 10 | ) |
| 8 | 11 | ||
| 9 | set(HEADERS | 12 | set(HEADERS |
| 13 | core/arm/arm_test_common.h | ||
| 10 | ) | 14 | ) |
| 11 | 15 | ||
| 12 | create_directory_groups(${SRCS} ${HEADERS}) | 16 | create_directory_groups(${SRCS} ${HEADERS}) |
diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp new file mode 100644 index 000000000..2339bdfb8 --- /dev/null +++ b/src/tests/core/arm/arm_test_common.cpp | |||
| @@ -0,0 +1,137 @@ | |||
| 1 | // Copyright 2016 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "core/core.h" | ||
| 6 | #include "core/hle/kernel/process.h" | ||
| 7 | #include "core/memory.h" | ||
| 8 | #include "core/memory_setup.h" | ||
| 9 | #include "tests/core/arm/arm_test_common.h" | ||
| 10 | |||
| 11 | namespace ArmTests { | ||
| 12 | |||
| 13 | static Memory::PageTable* page_table = nullptr; | ||
| 14 | |||
| 15 | TestEnvironment::TestEnvironment(bool mutable_memory_) | ||
| 16 | : mutable_memory(mutable_memory_), test_memory(std::make_shared<TestMemory>(this)) { | ||
| 17 | |||
| 18 | Kernel::g_current_process = Kernel::Process::Create(""); | ||
| 19 | page_table = &Kernel::g_current_process->vm_manager.page_table; | ||
| 20 | |||
| 21 | page_table->pointers.fill(nullptr); | ||
| 22 | page_table->attributes.fill(Memory::PageType::Unmapped); | ||
| 23 | page_table->cached_res_count.fill(0); | ||
| 24 | |||
| 25 | Memory::MapIoRegion(*page_table, 0x00000000, 0x80000000, test_memory); | ||
| 26 | Memory::MapIoRegion(*page_table, 0x80000000, 0x80000000, test_memory); | ||
| 27 | |||
| 28 | Memory::SetCurrentPageTable(page_table); | ||
| 29 | } | ||
| 30 | |||
| 31 | TestEnvironment::~TestEnvironment() { | ||
| 32 | Memory::UnmapRegion(*page_table, 0x80000000, 0x80000000); | ||
| 33 | Memory::UnmapRegion(*page_table, 0x00000000, 0x80000000); | ||
| 34 | } | ||
| 35 | |||
| 36 | void TestEnvironment::SetMemory64(VAddr vaddr, u64 value) { | ||
| 37 | SetMemory32(vaddr + 0, static_cast<u32>(value)); | ||
| 38 | SetMemory32(vaddr + 4, static_cast<u32>(value >> 32)); | ||
| 39 | } | ||
| 40 | |||
| 41 | void TestEnvironment::SetMemory32(VAddr vaddr, u32 value) { | ||
| 42 | SetMemory16(vaddr + 0, static_cast<u16>(value)); | ||
| 43 | SetMemory16(vaddr + 2, static_cast<u16>(value >> 16)); | ||
| 44 | } | ||
| 45 | |||
| 46 | void TestEnvironment::SetMemory16(VAddr vaddr, u16 value) { | ||
| 47 | SetMemory8(vaddr + 0, static_cast<u8>(value)); | ||
| 48 | SetMemory8(vaddr + 1, static_cast<u8>(value >> 8)); | ||
| 49 | } | ||
| 50 | |||
| 51 | void TestEnvironment::SetMemory8(VAddr vaddr, u8 value) { | ||
| 52 | test_memory->data[vaddr] = value; | ||
| 53 | } | ||
| 54 | |||
| 55 | std::vector<WriteRecord> TestEnvironment::GetWriteRecords() const { | ||
| 56 | return write_records; | ||
| 57 | } | ||
| 58 | |||
| 59 | void TestEnvironment::ClearWriteRecords() { | ||
| 60 | write_records.clear(); | ||
| 61 | } | ||
| 62 | |||
| 63 | TestEnvironment::TestMemory::~TestMemory() {} | ||
| 64 | |||
| 65 | bool TestEnvironment::TestMemory::IsValidAddress(VAddr addr) { | ||
| 66 | return true; | ||
| 67 | } | ||
| 68 | |||
| 69 | u8 TestEnvironment::TestMemory::Read8(VAddr addr) { | ||
| 70 | auto iter = data.find(addr); | ||
| 71 | if (iter == data.end()) { | ||
| 72 | return addr; // Some arbitrary data | ||
| 73 | } | ||
| 74 | return iter->second; | ||
| 75 | } | ||
| 76 | |||
| 77 | u16 TestEnvironment::TestMemory::Read16(VAddr addr) { | ||
| 78 | return Read8(addr) | static_cast<u16>(Read8(addr + 1)) << 8; | ||
| 79 | } | ||
| 80 | |||
| 81 | u32 TestEnvironment::TestMemory::Read32(VAddr addr) { | ||
| 82 | return Read16(addr) | static_cast<u32>(Read16(addr + 2)) << 16; | ||
| 83 | } | ||
| 84 | |||
| 85 | u64 TestEnvironment::TestMemory::Read64(VAddr addr) { | ||
| 86 | return Read32(addr) | static_cast<u64>(Read32(addr + 4)) << 32; | ||
| 87 | } | ||
| 88 | |||
| 89 | bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) { | ||
| 90 | VAddr addr = src_addr; | ||
| 91 | u8* data = static_cast<u8*>(dest_buffer); | ||
| 92 | |||
| 93 | for (size_t i = 0; i < size; i++, addr++, data++) { | ||
| 94 | *data = Read8(addr); | ||
| 95 | } | ||
| 96 | |||
| 97 | return true; | ||
| 98 | } | ||
| 99 | |||
| 100 | void TestEnvironment::TestMemory::Write8(VAddr addr, u8 data) { | ||
| 101 | env->write_records.emplace_back(8, addr, data); | ||
| 102 | if (env->mutable_memory) | ||
| 103 | env->SetMemory8(addr, data); | ||
| 104 | } | ||
| 105 | |||
| 106 | void TestEnvironment::TestMemory::Write16(VAddr addr, u16 data) { | ||
| 107 | env->write_records.emplace_back(16, addr, data); | ||
| 108 | if (env->mutable_memory) | ||
| 109 | env->SetMemory16(addr, data); | ||
| 110 | } | ||
| 111 | |||
| 112 | void TestEnvironment::TestMemory::Write32(VAddr addr, u32 data) { | ||
| 113 | env->write_records.emplace_back(32, addr, data); | ||
| 114 | if (env->mutable_memory) | ||
| 115 | env->SetMemory32(addr, data); | ||
| 116 | } | ||
| 117 | |||
| 118 | void TestEnvironment::TestMemory::Write64(VAddr addr, u64 data) { | ||
| 119 | env->write_records.emplace_back(64, addr, data); | ||
| 120 | if (env->mutable_memory) | ||
| 121 | env->SetMemory64(addr, data); | ||
| 122 | } | ||
| 123 | |||
| 124 | bool TestEnvironment::TestMemory::WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) { | ||
| 125 | VAddr addr = dest_addr; | ||
| 126 | const u8* data = static_cast<const u8*>(src_buffer); | ||
| 127 | |||
| 128 | for (size_t i = 0; i < size; i++, addr++, data++) { | ||
| 129 | env->write_records.emplace_back(8, addr, *data); | ||
| 130 | if (env->mutable_memory) | ||
| 131 | env->SetMemory8(addr, *data); | ||
| 132 | } | ||
| 133 | |||
| 134 | return true; | ||
| 135 | } | ||
| 136 | |||
| 137 | } // namespace ArmTests | ||
diff --git a/src/tests/core/arm/arm_test_common.h b/src/tests/core/arm/arm_test_common.h new file mode 100644 index 000000000..592c28594 --- /dev/null +++ b/src/tests/core/arm/arm_test_common.h | |||
| @@ -0,0 +1,84 @@ | |||
| 1 | // Copyright 2016 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <tuple> | ||
| 6 | #include <unordered_map> | ||
| 7 | #include <vector> | ||
| 8 | |||
| 9 | #include "common/common_types.h" | ||
| 10 | #include "core/mmio.h" | ||
| 11 | |||
| 12 | namespace ArmTests { | ||
| 13 | |||
| 14 | struct WriteRecord { | ||
| 15 | WriteRecord(size_t size, VAddr addr, u64 data) : size(size), addr(addr), data(data) {} | ||
| 16 | size_t size; | ||
| 17 | VAddr addr; | ||
| 18 | u64 data; | ||
| 19 | bool operator==(const WriteRecord& o) const { | ||
| 20 | return std::tie(size, addr, data) == std::tie(o.size, o.addr, o.data); | ||
| 21 | } | ||
| 22 | }; | ||
| 23 | |||
| 24 | class TestEnvironment final { | ||
| 25 | public: | ||
| 26 | /* | ||
| 27 | * Inititalise test environment | ||
| 28 | * @param mutable_memory If false, writes to memory can never be read back. | ||
| 29 | * (Memory is immutable.) | ||
| 30 | */ | ||
| 31 | explicit TestEnvironment(bool mutable_memory = false); | ||
| 32 | |||
| 33 | /// Shutdown test environment | ||
| 34 | ~TestEnvironment(); | ||
| 35 | |||
| 36 | /// Sets value at memory location vaddr. | ||
| 37 | void SetMemory8(VAddr vaddr, u8 value); | ||
| 38 | void SetMemory16(VAddr vaddr, u16 value); | ||
| 39 | void SetMemory32(VAddr vaddr, u32 value); | ||
| 40 | void SetMemory64(VAddr vaddr, u64 value); | ||
| 41 | |||
| 42 | /** | ||
| 43 | * Whenever Memory::Write{8,16,32,64} is called within the test environment, | ||
| 44 | * a new write-record is made. | ||
| 45 | * @returns A vector of write records made since they were last cleared. | ||
| 46 | */ | ||
| 47 | std::vector<WriteRecord> GetWriteRecords() const; | ||
| 48 | |||
| 49 | /// Empties the internal write-record store. | ||
| 50 | void ClearWriteRecords(); | ||
| 51 | |||
| 52 | private: | ||
| 53 | friend struct TestMemory; | ||
| 54 | struct TestMemory final : Memory::MMIORegion { | ||
| 55 | explicit TestMemory(TestEnvironment* env_) : env(env_) {} | ||
| 56 | TestEnvironment* env; | ||
| 57 | |||
| 58 | ~TestMemory() override; | ||
| 59 | |||
| 60 | bool IsValidAddress(VAddr addr) override; | ||
| 61 | |||
| 62 | u8 Read8(VAddr addr) override; | ||
| 63 | u16 Read16(VAddr addr) override; | ||
| 64 | u32 Read32(VAddr addr) override; | ||
| 65 | u64 Read64(VAddr addr) override; | ||
| 66 | |||
| 67 | bool ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) override; | ||
| 68 | |||
| 69 | void Write8(VAddr addr, u8 data) override; | ||
| 70 | void Write16(VAddr addr, u16 data) override; | ||
| 71 | void Write32(VAddr addr, u32 data) override; | ||
| 72 | void Write64(VAddr addr, u64 data) override; | ||
| 73 | |||
| 74 | bool WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) override; | ||
| 75 | |||
| 76 | std::unordered_map<VAddr, u8> data; | ||
| 77 | }; | ||
| 78 | |||
| 79 | bool mutable_memory; | ||
| 80 | std::shared_ptr<TestMemory> test_memory; | ||
| 81 | std::vector<WriteRecord> write_records; | ||
| 82 | }; | ||
| 83 | |||
| 84 | } // namespace ArmTests | ||
diff --git a/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp b/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp new file mode 100644 index 000000000..83719a58e --- /dev/null +++ b/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | // Copyright 2016 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <catch.hpp> | ||
| 6 | |||
| 7 | #include "core/arm/dyncom/arm_dyncom.h" | ||
| 8 | #include "core/core_timing.h" | ||
| 9 | #include "tests/core/arm/arm_test_common.h" | ||
| 10 | |||
| 11 | namespace ArmTests { | ||
| 12 | |||
| 13 | struct VfpTestCase { | ||
| 14 | u32 initial_fpscr; | ||
| 15 | u32 a; | ||
| 16 | u32 b; | ||
| 17 | u32 result; | ||
| 18 | u32 final_fpscr; | ||
| 19 | }; | ||
| 20 | |||
| 21 | TEST_CASE("ARM_DynCom (vfp): vadd", "[arm_dyncom]") { | ||
| 22 | TestEnvironment test_env(false); | ||
| 23 | test_env.SetMemory32(0, 0xEE321A03); // vadd.f32 s2, s4, s6 | ||
| 24 | test_env.SetMemory32(4, 0xEAFFFFFE); // b +#0 | ||
| 25 | |||
| 26 | ARM_DynCom dyncom(USER32MODE); | ||
| 27 | |||
| 28 | std::vector<VfpTestCase> test_cases{{ | ||
| 29 | #include "vfp_vadd_f32.inc" | ||
| 30 | }}; | ||
| 31 | |||
| 32 | for (const auto& test_case : test_cases) { | ||
| 33 | dyncom.SetPC(0); | ||
| 34 | dyncom.SetVFPSystemReg(VFP_FPSCR, test_case.initial_fpscr); | ||
| 35 | dyncom.SetVFPReg(4, test_case.a); | ||
| 36 | dyncom.SetVFPReg(6, test_case.b); | ||
| 37 | dyncom.ExecuteInstructions(1); | ||
| 38 | if (dyncom.GetVFPReg(2) != test_case.result || | ||
| 39 | dyncom.GetVFPSystemReg(VFP_FPSCR) != test_case.final_fpscr) { | ||
| 40 | printf("f: %x\n", test_case.initial_fpscr); | ||
| 41 | printf("a: %x\n", test_case.a); | ||
| 42 | printf("b: %x\n", test_case.b); | ||
| 43 | printf("c: %x (%x)\n", dyncom.GetVFPReg(2), test_case.result); | ||
| 44 | printf("f: %x (%x)\n", dyncom.GetVFPSystemReg(VFP_FPSCR), test_case.final_fpscr); | ||
| 45 | FAIL(); | ||
| 46 | } | ||
| 47 | } | ||
| 48 | } | ||
| 49 | |||
| 50 | } // namespace ArmTests \ No newline at end of file | ||
diff --git a/src/tests/core/arm/dyncom/vfp_vadd_f32.inc b/src/tests/core/arm/dyncom/vfp_vadd_f32.inc new file mode 100644 index 000000000..d0032c2e6 --- /dev/null +++ b/src/tests/core/arm/dyncom/vfp_vadd_f32.inc | |||
| @@ -0,0 +1,13456 @@ | |||
| 1 | {0x3c00000, 0x0, 0x0, 0x0, 0x3c00000}, | ||
| 2 | {0x3c00000, 0x0, 0x1, 0x0, 0x3c00080}, | ||
| 3 | {0x3c00000, 0x0, 0x76, 0x0, 0x3c00080}, | ||
| 4 | {0x3c00000, 0x0, 0x2b94, 0x0, 0x3c00080}, | ||
| 5 | {0x3c00000, 0x0, 0x636d24, 0x0, 0x3c00080}, | ||
| 6 | {0x3c00000, 0x0, 0x7fffff, 0x0, 0x3c00080}, | ||
| 7 | {0x3c00000, 0x0, 0x800000, 0x800000, 0x3c00000}, | ||
| 8 | {0x3c00000, 0x0, 0x800002, 0x800002, 0x3c00000}, | ||
| 9 | {0x3c00000, 0x0, 0x1398437, 0x1398437, 0x3c00000}, | ||
| 10 | {0x3c00000, 0x0, 0xba98d27, 0xba98d27, 0x3c00000}, | ||
| 11 | {0x3c00000, 0x0, 0xba98d7a, 0xba98d7a, 0x3c00000}, | ||
| 12 | {0x3c00000, 0x0, 0x751f853a, 0x751f853a, 0x3c00000}, | ||
| 13 | {0x3c00000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3c00000}, | ||
| 14 | {0x3c00000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3c00000}, | ||
| 15 | {0x3c00000, 0x0, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 16 | {0x3c00000, 0x0, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 17 | {0x3c00000, 0x0, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 18 | {0x3c00000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 19 | {0x3c00000, 0x0, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 20 | {0x3c00000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 21 | {0x3c00000, 0x0, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 22 | {0x3c00000, 0x0, 0x80000000, 0x0, 0x3c00000}, | ||
| 23 | {0x3c00000, 0x0, 0x80000001, 0x0, 0x3c00080}, | ||
| 24 | {0x3c00000, 0x0, 0x80000076, 0x0, 0x3c00080}, | ||
| 25 | {0x3c00000, 0x0, 0x80002b94, 0x0, 0x3c00080}, | ||
| 26 | {0x3c00000, 0x0, 0x80636d24, 0x0, 0x3c00080}, | ||
| 27 | {0x3c00000, 0x0, 0x807fffff, 0x0, 0x3c00080}, | ||
| 28 | {0x3c00000, 0x0, 0x80800000, 0x80800000, 0x3c00000}, | ||
| 29 | {0x3c00000, 0x0, 0x80800002, 0x80800002, 0x3c00000}, | ||
| 30 | {0x3c00000, 0x0, 0x81398437, 0x81398437, 0x3c00000}, | ||
| 31 | {0x3c00000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3c00000}, | ||
| 32 | {0x3c00000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3c00000}, | ||
| 33 | {0x3c00000, 0x0, 0xf51f853a, 0xf51f853a, 0x3c00000}, | ||
| 34 | {0x3c00000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3c00000}, | ||
| 35 | {0x3c00000, 0x0, 0xff7fffff, 0xff7fffff, 0x3c00000}, | ||
| 36 | {0x3c00000, 0x0, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 37 | {0x3c00000, 0x0, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 38 | {0x3c00000, 0x0, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 39 | {0x3c00000, 0x0, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 40 | {0x3c00000, 0x0, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 41 | {0x3c00000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 42 | {0x3c00000, 0x0, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 43 | {0x3c00000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3c00000}, | ||
| 44 | {0x3c00000, 0x0, 0xe73a5134, 0xe73a5134, 0x3c00000}, | ||
| 45 | {0x3c00000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3c00000}, | ||
| 46 | {0x3c00000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3c00000}, | ||
| 47 | {0x3c00000, 0x0, 0x9503366, 0x9503366, 0x3c00000}, | ||
| 48 | {0x3c00000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3c00000}, | ||
| 49 | {0x3c00000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3c00000}, | ||
| 50 | {0x3c00000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3c00000}, | ||
| 51 | {0x3c00000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3c00000}, | ||
| 52 | {0x3c00000, 0x0, 0x966320b, 0x966320b, 0x3c00000}, | ||
| 53 | {0x3c00000, 0x0, 0xb26bddee, 0xb26bddee, 0x3c00000}, | ||
| 54 | {0x3c00000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00000}, | ||
| 55 | {0x3c00000, 0x0, 0x317285d3, 0x317285d3, 0x3c00000}, | ||
| 56 | {0x3c00000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3c00000}, | ||
| 57 | {0x3c00000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3c00000}, | ||
| 58 | {0x3c00000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3c00000}, | ||
| 59 | {0x3c00000, 0x1, 0x0, 0x0, 0x3c00080}, | ||
| 60 | {0x3c00000, 0x1, 0x1, 0x0, 0x3c00080}, | ||
| 61 | {0x3c00000, 0x1, 0x76, 0x0, 0x3c00080}, | ||
| 62 | {0x3c00000, 0x1, 0x2b94, 0x0, 0x3c00080}, | ||
| 63 | {0x3c00000, 0x1, 0x636d24, 0x0, 0x3c00080}, | ||
| 64 | {0x3c00000, 0x1, 0x7fffff, 0x0, 0x3c00080}, | ||
| 65 | {0x3c00000, 0x1, 0x800000, 0x800000, 0x3c00080}, | ||
| 66 | {0x3c00000, 0x1, 0x800002, 0x800002, 0x3c00080}, | ||
| 67 | {0x3c00000, 0x1, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 68 | {0x3c00000, 0x1, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 69 | {0x3c00000, 0x1, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 70 | {0x3c00000, 0x1, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 71 | {0x3c00000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 72 | {0x3c00000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 73 | {0x3c00000, 0x1, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 74 | {0x3c00000, 0x1, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 75 | {0x3c00000, 0x1, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 76 | {0x3c00000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 77 | {0x3c00000, 0x1, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 78 | {0x3c00000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 79 | {0x3c00000, 0x1, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 80 | {0x3c00000, 0x1, 0x80000000, 0x0, 0x3c00080}, | ||
| 81 | {0x3c00000, 0x1, 0x80000001, 0x0, 0x3c00080}, | ||
| 82 | {0x3c00000, 0x1, 0x80000076, 0x0, 0x3c00080}, | ||
| 83 | {0x3c00000, 0x1, 0x80002b94, 0x0, 0x3c00080}, | ||
| 84 | {0x3c00000, 0x1, 0x80636d24, 0x0, 0x3c00080}, | ||
| 85 | {0x3c00000, 0x1, 0x807fffff, 0x0, 0x3c00080}, | ||
| 86 | {0x3c00000, 0x1, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 87 | {0x3c00000, 0x1, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 88 | {0x3c00000, 0x1, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 89 | {0x3c00000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 90 | {0x3c00000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 91 | {0x3c00000, 0x1, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 92 | {0x3c00000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 93 | {0x3c00000, 0x1, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 94 | {0x3c00000, 0x1, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 95 | {0x3c00000, 0x1, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 96 | {0x3c00000, 0x1, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 97 | {0x3c00000, 0x1, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 98 | {0x3c00000, 0x1, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 99 | {0x3c00000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 100 | {0x3c00000, 0x1, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 101 | {0x3c00000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 102 | {0x3c00000, 0x1, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 103 | {0x3c00000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 104 | {0x3c00000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 105 | {0x3c00000, 0x1, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 106 | {0x3c00000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 107 | {0x3c00000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 108 | {0x3c00000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 109 | {0x3c00000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 110 | {0x3c00000, 0x1, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 111 | {0x3c00000, 0x1, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 112 | {0x3c00000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 113 | {0x3c00000, 0x1, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 114 | {0x3c00000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 115 | {0x3c00000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 116 | {0x3c00000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 117 | {0x3c00000, 0x76, 0x0, 0x0, 0x3c00080}, | ||
| 118 | {0x3c00000, 0x76, 0x1, 0x0, 0x3c00080}, | ||
| 119 | {0x3c00000, 0x76, 0x76, 0x0, 0x3c00080}, | ||
| 120 | {0x3c00000, 0x76, 0x2b94, 0x0, 0x3c00080}, | ||
| 121 | {0x3c00000, 0x76, 0x636d24, 0x0, 0x3c00080}, | ||
| 122 | {0x3c00000, 0x76, 0x7fffff, 0x0, 0x3c00080}, | ||
| 123 | {0x3c00000, 0x76, 0x800000, 0x800000, 0x3c00080}, | ||
| 124 | {0x3c00000, 0x76, 0x800002, 0x800002, 0x3c00080}, | ||
| 125 | {0x3c00000, 0x76, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 126 | {0x3c00000, 0x76, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 127 | {0x3c00000, 0x76, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 128 | {0x3c00000, 0x76, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 129 | {0x3c00000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 130 | {0x3c00000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 131 | {0x3c00000, 0x76, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 132 | {0x3c00000, 0x76, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 133 | {0x3c00000, 0x76, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 134 | {0x3c00000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 135 | {0x3c00000, 0x76, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 136 | {0x3c00000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 137 | {0x3c00000, 0x76, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 138 | {0x3c00000, 0x76, 0x80000000, 0x0, 0x3c00080}, | ||
| 139 | {0x3c00000, 0x76, 0x80000001, 0x0, 0x3c00080}, | ||
| 140 | {0x3c00000, 0x76, 0x80000076, 0x0, 0x3c00080}, | ||
| 141 | {0x3c00000, 0x76, 0x80002b94, 0x0, 0x3c00080}, | ||
| 142 | {0x3c00000, 0x76, 0x80636d24, 0x0, 0x3c00080}, | ||
| 143 | {0x3c00000, 0x76, 0x807fffff, 0x0, 0x3c00080}, | ||
| 144 | {0x3c00000, 0x76, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 145 | {0x3c00000, 0x76, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 146 | {0x3c00000, 0x76, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 147 | {0x3c00000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 148 | {0x3c00000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 149 | {0x3c00000, 0x76, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 150 | {0x3c00000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 151 | {0x3c00000, 0x76, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 152 | {0x3c00000, 0x76, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 153 | {0x3c00000, 0x76, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 154 | {0x3c00000, 0x76, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 155 | {0x3c00000, 0x76, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 156 | {0x3c00000, 0x76, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 157 | {0x3c00000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 158 | {0x3c00000, 0x76, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 159 | {0x3c00000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 160 | {0x3c00000, 0x76, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 161 | {0x3c00000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 162 | {0x3c00000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 163 | {0x3c00000, 0x76, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 164 | {0x3c00000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 165 | {0x3c00000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 166 | {0x3c00000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 167 | {0x3c00000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 168 | {0x3c00000, 0x76, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 169 | {0x3c00000, 0x76, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 170 | {0x3c00000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 171 | {0x3c00000, 0x76, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 172 | {0x3c00000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 173 | {0x3c00000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 174 | {0x3c00000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 175 | {0x3c00000, 0x2b94, 0x0, 0x0, 0x3c00080}, | ||
| 176 | {0x3c00000, 0x2b94, 0x1, 0x0, 0x3c00080}, | ||
| 177 | {0x3c00000, 0x2b94, 0x76, 0x0, 0x3c00080}, | ||
| 178 | {0x3c00000, 0x2b94, 0x2b94, 0x0, 0x3c00080}, | ||
| 179 | {0x3c00000, 0x2b94, 0x636d24, 0x0, 0x3c00080}, | ||
| 180 | {0x3c00000, 0x2b94, 0x7fffff, 0x0, 0x3c00080}, | ||
| 181 | {0x3c00000, 0x2b94, 0x800000, 0x800000, 0x3c00080}, | ||
| 182 | {0x3c00000, 0x2b94, 0x800002, 0x800002, 0x3c00080}, | ||
| 183 | {0x3c00000, 0x2b94, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 184 | {0x3c00000, 0x2b94, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 185 | {0x3c00000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 186 | {0x3c00000, 0x2b94, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 187 | {0x3c00000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 188 | {0x3c00000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 189 | {0x3c00000, 0x2b94, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 190 | {0x3c00000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 191 | {0x3c00000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 192 | {0x3c00000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 193 | {0x3c00000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 194 | {0x3c00000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 195 | {0x3c00000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 196 | {0x3c00000, 0x2b94, 0x80000000, 0x0, 0x3c00080}, | ||
| 197 | {0x3c00000, 0x2b94, 0x80000001, 0x0, 0x3c00080}, | ||
| 198 | {0x3c00000, 0x2b94, 0x80000076, 0x0, 0x3c00080}, | ||
| 199 | {0x3c00000, 0x2b94, 0x80002b94, 0x0, 0x3c00080}, | ||
| 200 | {0x3c00000, 0x2b94, 0x80636d24, 0x0, 0x3c00080}, | ||
| 201 | {0x3c00000, 0x2b94, 0x807fffff, 0x0, 0x3c00080}, | ||
| 202 | {0x3c00000, 0x2b94, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 203 | {0x3c00000, 0x2b94, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 204 | {0x3c00000, 0x2b94, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 205 | {0x3c00000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 206 | {0x3c00000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 207 | {0x3c00000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 208 | {0x3c00000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 209 | {0x3c00000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 210 | {0x3c00000, 0x2b94, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 211 | {0x3c00000, 0x2b94, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 212 | {0x3c00000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 213 | {0x3c00000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 214 | {0x3c00000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 215 | {0x3c00000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 216 | {0x3c00000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 217 | {0x3c00000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 218 | {0x3c00000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 219 | {0x3c00000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 220 | {0x3c00000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 221 | {0x3c00000, 0x2b94, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 222 | {0x3c00000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 223 | {0x3c00000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 224 | {0x3c00000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 225 | {0x3c00000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 226 | {0x3c00000, 0x2b94, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 227 | {0x3c00000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 228 | {0x3c00000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 229 | {0x3c00000, 0x2b94, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 230 | {0x3c00000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 231 | {0x3c00000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 232 | {0x3c00000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 233 | {0x3c00000, 0x636d24, 0x0, 0x0, 0x3c00080}, | ||
| 234 | {0x3c00000, 0x636d24, 0x1, 0x0, 0x3c00080}, | ||
| 235 | {0x3c00000, 0x636d24, 0x76, 0x0, 0x3c00080}, | ||
| 236 | {0x3c00000, 0x636d24, 0x2b94, 0x0, 0x3c00080}, | ||
| 237 | {0x3c00000, 0x636d24, 0x636d24, 0x0, 0x3c00080}, | ||
| 238 | {0x3c00000, 0x636d24, 0x7fffff, 0x0, 0x3c00080}, | ||
| 239 | {0x3c00000, 0x636d24, 0x800000, 0x800000, 0x3c00080}, | ||
| 240 | {0x3c00000, 0x636d24, 0x800002, 0x800002, 0x3c00080}, | ||
| 241 | {0x3c00000, 0x636d24, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 242 | {0x3c00000, 0x636d24, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 243 | {0x3c00000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 244 | {0x3c00000, 0x636d24, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 245 | {0x3c00000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 246 | {0x3c00000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 247 | {0x3c00000, 0x636d24, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 248 | {0x3c00000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 249 | {0x3c00000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 250 | {0x3c00000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 251 | {0x3c00000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 252 | {0x3c00000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 253 | {0x3c00000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 254 | {0x3c00000, 0x636d24, 0x80000000, 0x0, 0x3c00080}, | ||
| 255 | {0x3c00000, 0x636d24, 0x80000001, 0x0, 0x3c00080}, | ||
| 256 | {0x3c00000, 0x636d24, 0x80000076, 0x0, 0x3c00080}, | ||
| 257 | {0x3c00000, 0x636d24, 0x80002b94, 0x0, 0x3c00080}, | ||
| 258 | {0x3c00000, 0x636d24, 0x80636d24, 0x0, 0x3c00080}, | ||
| 259 | {0x3c00000, 0x636d24, 0x807fffff, 0x0, 0x3c00080}, | ||
| 260 | {0x3c00000, 0x636d24, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 261 | {0x3c00000, 0x636d24, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 262 | {0x3c00000, 0x636d24, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 263 | {0x3c00000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 264 | {0x3c00000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 265 | {0x3c00000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 266 | {0x3c00000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 267 | {0x3c00000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 268 | {0x3c00000, 0x636d24, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 269 | {0x3c00000, 0x636d24, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 270 | {0x3c00000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 271 | {0x3c00000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 272 | {0x3c00000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 273 | {0x3c00000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 274 | {0x3c00000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 275 | {0x3c00000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 276 | {0x3c00000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 277 | {0x3c00000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 278 | {0x3c00000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 279 | {0x3c00000, 0x636d24, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 280 | {0x3c00000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 281 | {0x3c00000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 282 | {0x3c00000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 283 | {0x3c00000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 284 | {0x3c00000, 0x636d24, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 285 | {0x3c00000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 286 | {0x3c00000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 287 | {0x3c00000, 0x636d24, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 288 | {0x3c00000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 289 | {0x3c00000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 290 | {0x3c00000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 291 | {0x3c00000, 0x7fffff, 0x0, 0x0, 0x3c00080}, | ||
| 292 | {0x3c00000, 0x7fffff, 0x1, 0x0, 0x3c00080}, | ||
| 293 | {0x3c00000, 0x7fffff, 0x76, 0x0, 0x3c00080}, | ||
| 294 | {0x3c00000, 0x7fffff, 0x2b94, 0x0, 0x3c00080}, | ||
| 295 | {0x3c00000, 0x7fffff, 0x636d24, 0x0, 0x3c00080}, | ||
| 296 | {0x3c00000, 0x7fffff, 0x7fffff, 0x0, 0x3c00080}, | ||
| 297 | {0x3c00000, 0x7fffff, 0x800000, 0x800000, 0x3c00080}, | ||
| 298 | {0x3c00000, 0x7fffff, 0x800002, 0x800002, 0x3c00080}, | ||
| 299 | {0x3c00000, 0x7fffff, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 300 | {0x3c00000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 301 | {0x3c00000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 302 | {0x3c00000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 303 | {0x3c00000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 304 | {0x3c00000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 305 | {0x3c00000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 306 | {0x3c00000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 307 | {0x3c00000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 308 | {0x3c00000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 309 | {0x3c00000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 310 | {0x3c00000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 311 | {0x3c00000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 312 | {0x3c00000, 0x7fffff, 0x80000000, 0x0, 0x3c00080}, | ||
| 313 | {0x3c00000, 0x7fffff, 0x80000001, 0x0, 0x3c00080}, | ||
| 314 | {0x3c00000, 0x7fffff, 0x80000076, 0x0, 0x3c00080}, | ||
| 315 | {0x3c00000, 0x7fffff, 0x80002b94, 0x0, 0x3c00080}, | ||
| 316 | {0x3c00000, 0x7fffff, 0x80636d24, 0x0, 0x3c00080}, | ||
| 317 | {0x3c00000, 0x7fffff, 0x807fffff, 0x0, 0x3c00080}, | ||
| 318 | {0x3c00000, 0x7fffff, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 319 | {0x3c00000, 0x7fffff, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 320 | {0x3c00000, 0x7fffff, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 321 | {0x3c00000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 322 | {0x3c00000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 323 | {0x3c00000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 324 | {0x3c00000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 325 | {0x3c00000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 326 | {0x3c00000, 0x7fffff, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 327 | {0x3c00000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 328 | {0x3c00000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 329 | {0x3c00000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 330 | {0x3c00000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 331 | {0x3c00000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 332 | {0x3c00000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 333 | {0x3c00000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 334 | {0x3c00000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 335 | {0x3c00000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 336 | {0x3c00000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 337 | {0x3c00000, 0x7fffff, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 338 | {0x3c00000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 339 | {0x3c00000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 340 | {0x3c00000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 341 | {0x3c00000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 342 | {0x3c00000, 0x7fffff, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 343 | {0x3c00000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 344 | {0x3c00000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 345 | {0x3c00000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 346 | {0x3c00000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 347 | {0x3c00000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 348 | {0x3c00000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 349 | {0x3c00000, 0x800000, 0x0, 0x800000, 0x3c00000}, | ||
| 350 | {0x3c00000, 0x800000, 0x1, 0x800000, 0x3c00080}, | ||
| 351 | {0x3c00000, 0x800000, 0x76, 0x800000, 0x3c00080}, | ||
| 352 | {0x3c00000, 0x800000, 0x2b94, 0x800000, 0x3c00080}, | ||
| 353 | {0x3c00000, 0x800000, 0x636d24, 0x800000, 0x3c00080}, | ||
| 354 | {0x3c00000, 0x800000, 0x7fffff, 0x800000, 0x3c00080}, | ||
| 355 | {0x3c00000, 0x800000, 0x800000, 0x1000000, 0x3c00000}, | ||
| 356 | {0x3c00000, 0x800000, 0x800002, 0x1000001, 0x3c00000}, | ||
| 357 | {0x3c00000, 0x800000, 0x1398437, 0x1798437, 0x3c00000}, | ||
| 358 | {0x3c00000, 0x800000, 0xba98d27, 0xba98d29, 0x3c00000}, | ||
| 359 | {0x3c00000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3c00000}, | ||
| 360 | {0x3c00000, 0x800000, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 361 | {0x3c00000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 362 | {0x3c00000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 363 | {0x3c00000, 0x800000, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 364 | {0x3c00000, 0x800000, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 365 | {0x3c00000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 366 | {0x3c00000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 367 | {0x3c00000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 368 | {0x3c00000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 369 | {0x3c00000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 370 | {0x3c00000, 0x800000, 0x80000000, 0x800000, 0x3c00000}, | ||
| 371 | {0x3c00000, 0x800000, 0x80000001, 0x800000, 0x3c00080}, | ||
| 372 | {0x3c00000, 0x800000, 0x80000076, 0x800000, 0x3c00080}, | ||
| 373 | {0x3c00000, 0x800000, 0x80002b94, 0x800000, 0x3c00080}, | ||
| 374 | {0x3c00000, 0x800000, 0x80636d24, 0x800000, 0x3c00080}, | ||
| 375 | {0x3c00000, 0x800000, 0x807fffff, 0x800000, 0x3c00080}, | ||
| 376 | {0x3c00000, 0x800000, 0x80800000, 0x0, 0x3c00000}, | ||
| 377 | {0x3c00000, 0x800000, 0x80800002, 0x0, 0x3c00008}, | ||
| 378 | {0x3c00000, 0x800000, 0x81398437, 0x80f3086e, 0x3c00000}, | ||
| 379 | {0x3c00000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3c00000}, | ||
| 380 | {0x3c00000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3c00000}, | ||
| 381 | {0x3c00000, 0x800000, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 382 | {0x3c00000, 0x800000, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 383 | {0x3c00000, 0x800000, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 384 | {0x3c00000, 0x800000, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 385 | {0x3c00000, 0x800000, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 386 | {0x3c00000, 0x800000, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 387 | {0x3c00000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 388 | {0x3c00000, 0x800000, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 389 | {0x3c00000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 390 | {0x3c00000, 0x800000, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 391 | {0x3c00000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 392 | {0x3c00000, 0x800000, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 393 | {0x3c00000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 394 | {0x3c00000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 395 | {0x3c00000, 0x800000, 0x9503366, 0x95033a6, 0x3c00000}, | ||
| 396 | {0x3c00000, 0x800000, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, | ||
| 397 | {0x3c00000, 0x800000, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 398 | {0x3c00000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 399 | {0x3c00000, 0x800000, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, | ||
| 400 | {0x3c00000, 0x800000, 0x966320b, 0x966324b, 0x3c00000}, | ||
| 401 | {0x3c00000, 0x800000, 0xb26bddee, 0xb26bdded, 0x3c00010}, | ||
| 402 | {0x3c00000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, | ||
| 403 | {0x3c00000, 0x800000, 0x317285d3, 0x317285d3, 0x3c00010}, | ||
| 404 | {0x3c00000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, | ||
| 405 | {0x3c00000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 406 | {0x3c00000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 407 | {0x3c00000, 0x800002, 0x0, 0x800002, 0x3c00000}, | ||
| 408 | {0x3c00000, 0x800002, 0x1, 0x800002, 0x3c00080}, | ||
| 409 | {0x3c00000, 0x800002, 0x76, 0x800002, 0x3c00080}, | ||
| 410 | {0x3c00000, 0x800002, 0x2b94, 0x800002, 0x3c00080}, | ||
| 411 | {0x3c00000, 0x800002, 0x636d24, 0x800002, 0x3c00080}, | ||
| 412 | {0x3c00000, 0x800002, 0x7fffff, 0x800002, 0x3c00080}, | ||
| 413 | {0x3c00000, 0x800002, 0x800000, 0x1000001, 0x3c00000}, | ||
| 414 | {0x3c00000, 0x800002, 0x800002, 0x1000002, 0x3c00000}, | ||
| 415 | {0x3c00000, 0x800002, 0x1398437, 0x1798438, 0x3c00000}, | ||
| 416 | {0x3c00000, 0x800002, 0xba98d27, 0xba98d29, 0x3c00010}, | ||
| 417 | {0x3c00000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3c00010}, | ||
| 418 | {0x3c00000, 0x800002, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 419 | {0x3c00000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 420 | {0x3c00000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 421 | {0x3c00000, 0x800002, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 422 | {0x3c00000, 0x800002, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 423 | {0x3c00000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 424 | {0x3c00000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 425 | {0x3c00000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 426 | {0x3c00000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 427 | {0x3c00000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 428 | {0x3c00000, 0x800002, 0x80000000, 0x800002, 0x3c00000}, | ||
| 429 | {0x3c00000, 0x800002, 0x80000001, 0x800002, 0x3c00080}, | ||
| 430 | {0x3c00000, 0x800002, 0x80000076, 0x800002, 0x3c00080}, | ||
| 431 | {0x3c00000, 0x800002, 0x80002b94, 0x800002, 0x3c00080}, | ||
| 432 | {0x3c00000, 0x800002, 0x80636d24, 0x800002, 0x3c00080}, | ||
| 433 | {0x3c00000, 0x800002, 0x807fffff, 0x800002, 0x3c00080}, | ||
| 434 | {0x3c00000, 0x800002, 0x80800000, 0x0, 0x3c00008}, | ||
| 435 | {0x3c00000, 0x800002, 0x80800002, 0x0, 0x3c00000}, | ||
| 436 | {0x3c00000, 0x800002, 0x81398437, 0x80f3086c, 0x3c00000}, | ||
| 437 | {0x3c00000, 0x800002, 0x8ba98d27, 0x8ba98d24, 0x3c00010}, | ||
| 438 | {0x3c00000, 0x800002, 0x8ba98d7a, 0x8ba98d77, 0x3c00010}, | ||
| 439 | {0x3c00000, 0x800002, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 440 | {0x3c00000, 0x800002, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 441 | {0x3c00000, 0x800002, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 442 | {0x3c00000, 0x800002, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 443 | {0x3c00000, 0x800002, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 444 | {0x3c00000, 0x800002, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 445 | {0x3c00000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 446 | {0x3c00000, 0x800002, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 447 | {0x3c00000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 448 | {0x3c00000, 0x800002, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 449 | {0x3c00000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 450 | {0x3c00000, 0x800002, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 451 | {0x3c00000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 452 | {0x3c00000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 453 | {0x3c00000, 0x800002, 0x9503366, 0x95033a6, 0x3c00010}, | ||
| 454 | {0x3c00000, 0x800002, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, | ||
| 455 | {0x3c00000, 0x800002, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 456 | {0x3c00000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 457 | {0x3c00000, 0x800002, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, | ||
| 458 | {0x3c00000, 0x800002, 0x966320b, 0x966324b, 0x3c00010}, | ||
| 459 | {0x3c00000, 0x800002, 0xb26bddee, 0xb26bdded, 0x3c00010}, | ||
| 460 | {0x3c00000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, | ||
| 461 | {0x3c00000, 0x800002, 0x317285d3, 0x317285d3, 0x3c00010}, | ||
| 462 | {0x3c00000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, | ||
| 463 | {0x3c00000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 464 | {0x3c00000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 465 | {0x3c00000, 0x1398437, 0x0, 0x1398437, 0x3c00000}, | ||
| 466 | {0x3c00000, 0x1398437, 0x1, 0x1398437, 0x3c00080}, | ||
| 467 | {0x3c00000, 0x1398437, 0x76, 0x1398437, 0x3c00080}, | ||
| 468 | {0x3c00000, 0x1398437, 0x2b94, 0x1398437, 0x3c00080}, | ||
| 469 | {0x3c00000, 0x1398437, 0x636d24, 0x1398437, 0x3c00080}, | ||
| 470 | {0x3c00000, 0x1398437, 0x7fffff, 0x1398437, 0x3c00080}, | ||
| 471 | {0x3c00000, 0x1398437, 0x800000, 0x1798437, 0x3c00000}, | ||
| 472 | {0x3c00000, 0x1398437, 0x800002, 0x1798438, 0x3c00000}, | ||
| 473 | {0x3c00000, 0x1398437, 0x1398437, 0x1b98437, 0x3c00000}, | ||
| 474 | {0x3c00000, 0x1398437, 0xba98d27, 0xba98d2c, 0x3c00010}, | ||
| 475 | {0x3c00000, 0x1398437, 0xba98d7a, 0xba98d7f, 0x3c00010}, | ||
| 476 | {0x3c00000, 0x1398437, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 477 | {0x3c00000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 478 | {0x3c00000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 479 | {0x3c00000, 0x1398437, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 480 | {0x3c00000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 481 | {0x3c00000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 482 | {0x3c00000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 483 | {0x3c00000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 484 | {0x3c00000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 485 | {0x3c00000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 486 | {0x3c00000, 0x1398437, 0x80000000, 0x1398437, 0x3c00000}, | ||
| 487 | {0x3c00000, 0x1398437, 0x80000001, 0x1398437, 0x3c00080}, | ||
| 488 | {0x3c00000, 0x1398437, 0x80000076, 0x1398437, 0x3c00080}, | ||
| 489 | {0x3c00000, 0x1398437, 0x80002b94, 0x1398437, 0x3c00080}, | ||
| 490 | {0x3c00000, 0x1398437, 0x80636d24, 0x1398437, 0x3c00080}, | ||
| 491 | {0x3c00000, 0x1398437, 0x807fffff, 0x1398437, 0x3c00080}, | ||
| 492 | {0x3c00000, 0x1398437, 0x80800000, 0xf3086e, 0x3c00000}, | ||
| 493 | {0x3c00000, 0x1398437, 0x80800002, 0xf3086c, 0x3c00000}, | ||
| 494 | {0x3c00000, 0x1398437, 0x81398437, 0x0, 0x3c00000}, | ||
| 495 | {0x3c00000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3c00010}, | ||
| 496 | {0x3c00000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3c00010}, | ||
| 497 | {0x3c00000, 0x1398437, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 498 | {0x3c00000, 0x1398437, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 499 | {0x3c00000, 0x1398437, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 500 | {0x3c00000, 0x1398437, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 501 | {0x3c00000, 0x1398437, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 502 | {0x3c00000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 503 | {0x3c00000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 504 | {0x3c00000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 505 | {0x3c00000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 506 | {0x3c00000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 507 | {0x3c00000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 508 | {0x3c00000, 0x1398437, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 509 | {0x3c00000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 510 | {0x3c00000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 511 | {0x3c00000, 0x1398437, 0x9503366, 0x950341f, 0x3c00010}, | ||
| 512 | {0x3c00000, 0x1398437, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, | ||
| 513 | {0x3c00000, 0x1398437, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 514 | {0x3c00000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 515 | {0x3c00000, 0x1398437, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, | ||
| 516 | {0x3c00000, 0x1398437, 0x966320b, 0x96632c4, 0x3c00010}, | ||
| 517 | {0x3c00000, 0x1398437, 0xb26bddee, 0xb26bdded, 0x3c00010}, | ||
| 518 | {0x3c00000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, | ||
| 519 | {0x3c00000, 0x1398437, 0x317285d3, 0x317285d3, 0x3c00010}, | ||
| 520 | {0x3c00000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, | ||
| 521 | {0x3c00000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 522 | {0x3c00000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 523 | {0x3c00000, 0xba98d27, 0x0, 0xba98d27, 0x3c00000}, | ||
| 524 | {0x3c00000, 0xba98d27, 0x1, 0xba98d27, 0x3c00080}, | ||
| 525 | {0x3c00000, 0xba98d27, 0x76, 0xba98d27, 0x3c00080}, | ||
| 526 | {0x3c00000, 0xba98d27, 0x2b94, 0xba98d27, 0x3c00080}, | ||
| 527 | {0x3c00000, 0xba98d27, 0x636d24, 0xba98d27, 0x3c00080}, | ||
| 528 | {0x3c00000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3c00080}, | ||
| 529 | {0x3c00000, 0xba98d27, 0x800000, 0xba98d29, 0x3c00000}, | ||
| 530 | {0x3c00000, 0xba98d27, 0x800002, 0xba98d29, 0x3c00010}, | ||
| 531 | {0x3c00000, 0xba98d27, 0x1398437, 0xba98d2c, 0x3c00010}, | ||
| 532 | {0x3c00000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3c00000}, | ||
| 533 | {0x3c00000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3c00010}, | ||
| 534 | {0x3c00000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 535 | {0x3c00000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 536 | {0x3c00000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 537 | {0x3c00000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 538 | {0x3c00000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 539 | {0x3c00000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 540 | {0x3c00000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 541 | {0x3c00000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 542 | {0x3c00000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 543 | {0x3c00000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 544 | {0x3c00000, 0xba98d27, 0x80000000, 0xba98d27, 0x3c00000}, | ||
| 545 | {0x3c00000, 0xba98d27, 0x80000001, 0xba98d27, 0x3c00080}, | ||
| 546 | {0x3c00000, 0xba98d27, 0x80000076, 0xba98d27, 0x3c00080}, | ||
| 547 | {0x3c00000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3c00080}, | ||
| 548 | {0x3c00000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3c00080}, | ||
| 549 | {0x3c00000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3c00080}, | ||
| 550 | {0x3c00000, 0xba98d27, 0x80800000, 0xba98d25, 0x3c00000}, | ||
| 551 | {0x3c00000, 0xba98d27, 0x80800002, 0xba98d24, 0x3c00010}, | ||
| 552 | {0x3c00000, 0xba98d27, 0x81398437, 0xba98d21, 0x3c00010}, | ||
| 553 | {0x3c00000, 0xba98d27, 0x8ba98d27, 0x0, 0x3c00000}, | ||
| 554 | {0x3c00000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3c00000}, | ||
| 555 | {0x3c00000, 0xba98d27, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 556 | {0x3c00000, 0xba98d27, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 557 | {0x3c00000, 0xba98d27, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 558 | {0x3c00000, 0xba98d27, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 559 | {0x3c00000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 560 | {0x3c00000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 561 | {0x3c00000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 562 | {0x3c00000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 563 | {0x3c00000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 564 | {0x3c00000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 565 | {0x3c00000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 566 | {0x3c00000, 0xba98d27, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 567 | {0x3c00000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 568 | {0x3c00000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 569 | {0x3c00000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3c00010}, | ||
| 570 | {0x3c00000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, | ||
| 571 | {0x3c00000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 572 | {0x3c00000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 573 | {0x3c00000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, | ||
| 574 | {0x3c00000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3c00010}, | ||
| 575 | {0x3c00000, 0xba98d27, 0xb26bddee, 0xb26bdded, 0x3c00010}, | ||
| 576 | {0x3c00000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, | ||
| 577 | {0x3c00000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3c00010}, | ||
| 578 | {0x3c00000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, | ||
| 579 | {0x3c00000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 580 | {0x3c00000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 581 | {0x3c00000, 0xba98d7a, 0x0, 0xba98d7a, 0x3c00000}, | ||
| 582 | {0x3c00000, 0xba98d7a, 0x1, 0xba98d7a, 0x3c00080}, | ||
| 583 | {0x3c00000, 0xba98d7a, 0x76, 0xba98d7a, 0x3c00080}, | ||
| 584 | {0x3c00000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3c00080}, | ||
| 585 | {0x3c00000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3c00080}, | ||
| 586 | {0x3c00000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3c00080}, | ||
| 587 | {0x3c00000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3c00000}, | ||
| 588 | {0x3c00000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3c00010}, | ||
| 589 | {0x3c00000, 0xba98d7a, 0x1398437, 0xba98d7f, 0x3c00010}, | ||
| 590 | {0x3c00000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3c00010}, | ||
| 591 | {0x3c00000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3c00000}, | ||
| 592 | {0x3c00000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 593 | {0x3c00000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 594 | {0x3c00000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 595 | {0x3c00000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 596 | {0x3c00000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 597 | {0x3c00000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 598 | {0x3c00000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 599 | {0x3c00000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 600 | {0x3c00000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 601 | {0x3c00000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 602 | {0x3c00000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3c00000}, | ||
| 603 | {0x3c00000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3c00080}, | ||
| 604 | {0x3c00000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3c00080}, | ||
| 605 | {0x3c00000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3c00080}, | ||
| 606 | {0x3c00000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3c00080}, | ||
| 607 | {0x3c00000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3c00080}, | ||
| 608 | {0x3c00000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3c00000}, | ||
| 609 | {0x3c00000, 0xba98d7a, 0x80800002, 0xba98d77, 0x3c00010}, | ||
| 610 | {0x3c00000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3c00010}, | ||
| 611 | {0x3c00000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3c00000}, | ||
| 612 | {0x3c00000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3c00000}, | ||
| 613 | {0x3c00000, 0xba98d7a, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 614 | {0x3c00000, 0xba98d7a, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 615 | {0x3c00000, 0xba98d7a, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 616 | {0x3c00000, 0xba98d7a, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 617 | {0x3c00000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 618 | {0x3c00000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 619 | {0x3c00000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 620 | {0x3c00000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 621 | {0x3c00000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 622 | {0x3c00000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 623 | {0x3c00000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 624 | {0x3c00000, 0xba98d7a, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 625 | {0x3c00000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 626 | {0x3c00000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 627 | {0x3c00000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3c00010}, | ||
| 628 | {0x3c00000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, | ||
| 629 | {0x3c00000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 630 | {0x3c00000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 631 | {0x3c00000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, | ||
| 632 | {0x3c00000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3c00010}, | ||
| 633 | {0x3c00000, 0xba98d7a, 0xb26bddee, 0xb26bdded, 0x3c00010}, | ||
| 634 | {0x3c00000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, | ||
| 635 | {0x3c00000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3c00010}, | ||
| 636 | {0x3c00000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, | ||
| 637 | {0x3c00000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 638 | {0x3c00000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 639 | {0x3c00000, 0x751f853a, 0x0, 0x751f853a, 0x3c00000}, | ||
| 640 | {0x3c00000, 0x751f853a, 0x1, 0x751f853a, 0x3c00080}, | ||
| 641 | {0x3c00000, 0x751f853a, 0x76, 0x751f853a, 0x3c00080}, | ||
| 642 | {0x3c00000, 0x751f853a, 0x2b94, 0x751f853a, 0x3c00080}, | ||
| 643 | {0x3c00000, 0x751f853a, 0x636d24, 0x751f853a, 0x3c00080}, | ||
| 644 | {0x3c00000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3c00080}, | ||
| 645 | {0x3c00000, 0x751f853a, 0x800000, 0x751f853a, 0x3c00010}, | ||
| 646 | {0x3c00000, 0x751f853a, 0x800002, 0x751f853a, 0x3c00010}, | ||
| 647 | {0x3c00000, 0x751f853a, 0x1398437, 0x751f853a, 0x3c00010}, | ||
| 648 | {0x3c00000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3c00010}, | ||
| 649 | {0x3c00000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3c00010}, | ||
| 650 | {0x3c00000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3c00000}, | ||
| 651 | {0x3c00000, 0x751f853a, 0x7f7ffff0, 0x7f7ffff9, 0x3c00010}, | ||
| 652 | {0x3c00000, 0x751f853a, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, | ||
| 653 | {0x3c00000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 654 | {0x3c00000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 655 | {0x3c00000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 656 | {0x3c00000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 657 | {0x3c00000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 658 | {0x3c00000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 659 | {0x3c00000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 660 | {0x3c00000, 0x751f853a, 0x80000000, 0x751f853a, 0x3c00000}, | ||
| 661 | {0x3c00000, 0x751f853a, 0x80000001, 0x751f853a, 0x3c00080}, | ||
| 662 | {0x3c00000, 0x751f853a, 0x80000076, 0x751f853a, 0x3c00080}, | ||
| 663 | {0x3c00000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3c00080}, | ||
| 664 | {0x3c00000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3c00080}, | ||
| 665 | {0x3c00000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3c00080}, | ||
| 666 | {0x3c00000, 0x751f853a, 0x80800000, 0x751f8539, 0x3c00010}, | ||
| 667 | {0x3c00000, 0x751f853a, 0x80800002, 0x751f8539, 0x3c00010}, | ||
| 668 | {0x3c00000, 0x751f853a, 0x81398437, 0x751f8539, 0x3c00010}, | ||
| 669 | {0x3c00000, 0x751f853a, 0x8ba98d27, 0x751f8539, 0x3c00010}, | ||
| 670 | {0x3c00000, 0x751f853a, 0x8ba98d7a, 0x751f8539, 0x3c00010}, | ||
| 671 | {0x3c00000, 0x751f853a, 0xf51f853a, 0x0, 0x3c00000}, | ||
| 672 | {0x3c00000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3c00010}, | ||
| 673 | {0x3c00000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3c00010}, | ||
| 674 | {0x3c00000, 0x751f853a, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 675 | {0x3c00000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 676 | {0x3c00000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 677 | {0x3c00000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 678 | {0x3c00000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 679 | {0x3c00000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 680 | {0x3c00000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 681 | {0x3c00000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3c00010}, | ||
| 682 | {0x3c00000, 0x751f853a, 0xe73a5134, 0x751f8539, 0x3c00010}, | ||
| 683 | {0x3c00000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3c00010}, | ||
| 684 | {0x3c00000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3c00010}, | ||
| 685 | {0x3c00000, 0x751f853a, 0x9503366, 0x751f853a, 0x3c00010}, | ||
| 686 | {0x3c00000, 0x751f853a, 0xbf5a97c9, 0x751f8539, 0x3c00010}, | ||
| 687 | {0x3c00000, 0x751f853a, 0xe6ff1a14, 0x751f8539, 0x3c00010}, | ||
| 688 | {0x3c00000, 0x751f853a, 0x77f31e2f, 0x77f81a58, 0x3c00010}, | ||
| 689 | {0x3c00000, 0x751f853a, 0xaab4d7d8, 0x751f8539, 0x3c00010}, | ||
| 690 | {0x3c00000, 0x751f853a, 0x966320b, 0x751f853a, 0x3c00010}, | ||
| 691 | {0x3c00000, 0x751f853a, 0xb26bddee, 0x751f8539, 0x3c00010}, | ||
| 692 | {0x3c00000, 0x751f853a, 0xb5c8e5d3, 0x751f8539, 0x3c00010}, | ||
| 693 | {0x3c00000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3c00010}, | ||
| 694 | {0x3c00000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3c00010}, | ||
| 695 | {0x3c00000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3c00010}, | ||
| 696 | {0x3c00000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3c00010}, | ||
| 697 | {0x3c00000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3c00000}, | ||
| 698 | {0x3c00000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3c00080}, | ||
| 699 | {0x3c00000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3c00080}, | ||
| 700 | {0x3c00000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3c00080}, | ||
| 701 | {0x3c00000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3c00080}, | ||
| 702 | {0x3c00000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3c00080}, | ||
| 703 | {0x3c00000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3c00010}, | ||
| 704 | {0x3c00000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3c00010}, | ||
| 705 | {0x3c00000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3c00010}, | ||
| 706 | {0x3c00000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3c00010}, | ||
| 707 | {0x3c00000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3c00010}, | ||
| 708 | {0x3c00000, 0x7f7ffff0, 0x751f853a, 0x7f7ffff9, 0x3c00010}, | ||
| 709 | {0x3c00000, 0x7f7ffff0, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, | ||
| 710 | {0x3c00000, 0x7f7ffff0, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, | ||
| 711 | {0x3c00000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 712 | {0x3c00000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 713 | {0x3c00000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 714 | {0x3c00000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 715 | {0x3c00000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 716 | {0x3c00000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 717 | {0x3c00000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 718 | {0x3c00000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3c00000}, | ||
| 719 | {0x3c00000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3c00080}, | ||
| 720 | {0x3c00000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3c00080}, | ||
| 721 | {0x3c00000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3c00080}, | ||
| 722 | {0x3c00000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3c00080}, | ||
| 723 | {0x3c00000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3c00080}, | ||
| 724 | {0x3c00000, 0x7f7ffff0, 0x80800000, 0x7f7fffef, 0x3c00010}, | ||
| 725 | {0x3c00000, 0x7f7ffff0, 0x80800002, 0x7f7fffef, 0x3c00010}, | ||
| 726 | {0x3c00000, 0x7f7ffff0, 0x81398437, 0x7f7fffef, 0x3c00010}, | ||
| 727 | {0x3c00000, 0x7f7ffff0, 0x8ba98d27, 0x7f7fffef, 0x3c00010}, | ||
| 728 | {0x3c00000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7fffef, 0x3c00010}, | ||
| 729 | {0x3c00000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3c00010}, | ||
| 730 | {0x3c00000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3c00000}, | ||
| 731 | {0x3c00000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3c00000}, | ||
| 732 | {0x3c00000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 733 | {0x3c00000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 734 | {0x3c00000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 735 | {0x3c00000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 736 | {0x3c00000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 737 | {0x3c00000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 738 | {0x3c00000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 739 | {0x3c00000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3c00010}, | ||
| 740 | {0x3c00000, 0x7f7ffff0, 0xe73a5134, 0x7f7fffef, 0x3c00010}, | ||
| 741 | {0x3c00000, 0x7f7ffff0, 0x7c994e9e, 0x7f7fffff, 0x3c00014}, | ||
| 742 | {0x3c00000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3c00010}, | ||
| 743 | {0x3c00000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3c00010}, | ||
| 744 | {0x3c00000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7fffef, 0x3c00010}, | ||
| 745 | {0x3c00000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7fffef, 0x3c00010}, | ||
| 746 | {0x3c00000, 0x7f7ffff0, 0x77f31e2f, 0x7f7fffff, 0x3c00014}, | ||
| 747 | {0x3c00000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7fffef, 0x3c00010}, | ||
| 748 | {0x3c00000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3c00010}, | ||
| 749 | {0x3c00000, 0x7f7ffff0, 0xb26bddee, 0x7f7fffef, 0x3c00010}, | ||
| 750 | {0x3c00000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7fffef, 0x3c00010}, | ||
| 751 | {0x3c00000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3c00010}, | ||
| 752 | {0x3c00000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3c00010}, | ||
| 753 | {0x3c00000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3c00010}, | ||
| 754 | {0x3c00000, 0x7f7ffff0, 0x7b906a6c, 0x7f7fffff, 0x3c00014}, | ||
| 755 | {0x3c00000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3c00000}, | ||
| 756 | {0x3c00000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3c00080}, | ||
| 757 | {0x3c00000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3c00080}, | ||
| 758 | {0x3c00000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3c00080}, | ||
| 759 | {0x3c00000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3c00080}, | ||
| 760 | {0x3c00000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 761 | {0x3c00000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3c00010}, | ||
| 762 | {0x3c00000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3c00010}, | ||
| 763 | {0x3c00000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3c00010}, | ||
| 764 | {0x3c00000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3c00010}, | ||
| 765 | {0x3c00000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3c00010}, | ||
| 766 | {0x3c00000, 0x7f7fffff, 0x751f853a, 0x7f7fffff, 0x3c00014}, | ||
| 767 | {0x3c00000, 0x7f7fffff, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, | ||
| 768 | {0x3c00000, 0x7f7fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, | ||
| 769 | {0x3c00000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 770 | {0x3c00000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 771 | {0x3c00000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 772 | {0x3c00000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 773 | {0x3c00000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 774 | {0x3c00000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 775 | {0x3c00000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 776 | {0x3c00000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3c00000}, | ||
| 777 | {0x3c00000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3c00080}, | ||
| 778 | {0x3c00000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3c00080}, | ||
| 779 | {0x3c00000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3c00080}, | ||
| 780 | {0x3c00000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3c00080}, | ||
| 781 | {0x3c00000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3c00080}, | ||
| 782 | {0x3c00000, 0x7f7fffff, 0x80800000, 0x7f7ffffe, 0x3c00010}, | ||
| 783 | {0x3c00000, 0x7f7fffff, 0x80800002, 0x7f7ffffe, 0x3c00010}, | ||
| 784 | {0x3c00000, 0x7f7fffff, 0x81398437, 0x7f7ffffe, 0x3c00010}, | ||
| 785 | {0x3c00000, 0x7f7fffff, 0x8ba98d27, 0x7f7ffffe, 0x3c00010}, | ||
| 786 | {0x3c00000, 0x7f7fffff, 0x8ba98d7a, 0x7f7ffffe, 0x3c00010}, | ||
| 787 | {0x3c00000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3c00010}, | ||
| 788 | {0x3c00000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3c00000}, | ||
| 789 | {0x3c00000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3c00000}, | ||
| 790 | {0x3c00000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 791 | {0x3c00000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 792 | {0x3c00000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 793 | {0x3c00000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 794 | {0x3c00000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 795 | {0x3c00000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 796 | {0x3c00000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 797 | {0x3c00000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3c00010}, | ||
| 798 | {0x3c00000, 0x7f7fffff, 0xe73a5134, 0x7f7ffffe, 0x3c00010}, | ||
| 799 | {0x3c00000, 0x7f7fffff, 0x7c994e9e, 0x7f7fffff, 0x3c00014}, | ||
| 800 | {0x3c00000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3c00010}, | ||
| 801 | {0x3c00000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3c00010}, | ||
| 802 | {0x3c00000, 0x7f7fffff, 0xbf5a97c9, 0x7f7ffffe, 0x3c00010}, | ||
| 803 | {0x3c00000, 0x7f7fffff, 0xe6ff1a14, 0x7f7ffffe, 0x3c00010}, | ||
| 804 | {0x3c00000, 0x7f7fffff, 0x77f31e2f, 0x7f7fffff, 0x3c00014}, | ||
| 805 | {0x3c00000, 0x7f7fffff, 0xaab4d7d8, 0x7f7ffffe, 0x3c00010}, | ||
| 806 | {0x3c00000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3c00010}, | ||
| 807 | {0x3c00000, 0x7f7fffff, 0xb26bddee, 0x7f7ffffe, 0x3c00010}, | ||
| 808 | {0x3c00000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7ffffe, 0x3c00010}, | ||
| 809 | {0x3c00000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3c00010}, | ||
| 810 | {0x3c00000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3c00010}, | ||
| 811 | {0x3c00000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3c00010}, | ||
| 812 | {0x3c00000, 0x7f7fffff, 0x7b906a6c, 0x7f7fffff, 0x3c00014}, | ||
| 813 | {0x3c00000, 0x7f800000, 0x0, 0x7f800000, 0x3c00000}, | ||
| 814 | {0x3c00000, 0x7f800000, 0x1, 0x7f800000, 0x3c00080}, | ||
| 815 | {0x3c00000, 0x7f800000, 0x76, 0x7f800000, 0x3c00080}, | ||
| 816 | {0x3c00000, 0x7f800000, 0x2b94, 0x7f800000, 0x3c00080}, | ||
| 817 | {0x3c00000, 0x7f800000, 0x636d24, 0x7f800000, 0x3c00080}, | ||
| 818 | {0x3c00000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3c00080}, | ||
| 819 | {0x3c00000, 0x7f800000, 0x800000, 0x7f800000, 0x3c00000}, | ||
| 820 | {0x3c00000, 0x7f800000, 0x800002, 0x7f800000, 0x3c00000}, | ||
| 821 | {0x3c00000, 0x7f800000, 0x1398437, 0x7f800000, 0x3c00000}, | ||
| 822 | {0x3c00000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3c00000}, | ||
| 823 | {0x3c00000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3c00000}, | ||
| 824 | {0x3c00000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3c00000}, | ||
| 825 | {0x3c00000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3c00000}, | ||
| 826 | {0x3c00000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3c00000}, | ||
| 827 | {0x3c00000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 828 | {0x3c00000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 829 | {0x3c00000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 830 | {0x3c00000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 831 | {0x3c00000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 832 | {0x3c00000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 833 | {0x3c00000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 834 | {0x3c00000, 0x7f800000, 0x80000000, 0x7f800000, 0x3c00000}, | ||
| 835 | {0x3c00000, 0x7f800000, 0x80000001, 0x7f800000, 0x3c00080}, | ||
| 836 | {0x3c00000, 0x7f800000, 0x80000076, 0x7f800000, 0x3c00080}, | ||
| 837 | {0x3c00000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3c00080}, | ||
| 838 | {0x3c00000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3c00080}, | ||
| 839 | {0x3c00000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3c00080}, | ||
| 840 | {0x3c00000, 0x7f800000, 0x80800000, 0x7f800000, 0x3c00000}, | ||
| 841 | {0x3c00000, 0x7f800000, 0x80800002, 0x7f800000, 0x3c00000}, | ||
| 842 | {0x3c00000, 0x7f800000, 0x81398437, 0x7f800000, 0x3c00000}, | ||
| 843 | {0x3c00000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3c00000}, | ||
| 844 | {0x3c00000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3c00000}, | ||
| 845 | {0x3c00000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3c00000}, | ||
| 846 | {0x3c00000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3c00000}, | ||
| 847 | {0x3c00000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3c00000}, | ||
| 848 | {0x3c00000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3c00001}, | ||
| 849 | {0x3c00000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 850 | {0x3c00000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 851 | {0x3c00000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 852 | {0x3c00000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 853 | {0x3c00000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 854 | {0x3c00000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 855 | {0x3c00000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3c00000}, | ||
| 856 | {0x3c00000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3c00000}, | ||
| 857 | {0x3c00000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3c00000}, | ||
| 858 | {0x3c00000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3c00000}, | ||
| 859 | {0x3c00000, 0x7f800000, 0x9503366, 0x7f800000, 0x3c00000}, | ||
| 860 | {0x3c00000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3c00000}, | ||
| 861 | {0x3c00000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3c00000}, | ||
| 862 | {0x3c00000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3c00000}, | ||
| 863 | {0x3c00000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3c00000}, | ||
| 864 | {0x3c00000, 0x7f800000, 0x966320b, 0x7f800000, 0x3c00000}, | ||
| 865 | {0x3c00000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3c00000}, | ||
| 866 | {0x3c00000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3c00000}, | ||
| 867 | {0x3c00000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3c00000}, | ||
| 868 | {0x3c00000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3c00000}, | ||
| 869 | {0x3c00000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3c00000}, | ||
| 870 | {0x3c00000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3c00000}, | ||
| 871 | {0x3c00000, 0x7f800001, 0x0, 0x7fc00000, 0x3c00001}, | ||
| 872 | {0x3c00000, 0x7f800001, 0x1, 0x7fc00000, 0x3c00081}, | ||
| 873 | {0x3c00000, 0x7f800001, 0x76, 0x7fc00000, 0x3c00081}, | ||
| 874 | {0x3c00000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3c00081}, | ||
| 875 | {0x3c00000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3c00081}, | ||
| 876 | {0x3c00000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3c00081}, | ||
| 877 | {0x3c00000, 0x7f800001, 0x800000, 0x7fc00000, 0x3c00001}, | ||
| 878 | {0x3c00000, 0x7f800001, 0x800002, 0x7fc00000, 0x3c00001}, | ||
| 879 | {0x3c00000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3c00001}, | ||
| 880 | {0x3c00000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3c00001}, | ||
| 881 | {0x3c00000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 882 | {0x3c00000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3c00001}, | ||
| 883 | {0x3c00000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 884 | {0x3c00000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3c00001}, | ||
| 885 | {0x3c00000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3c00001}, | ||
| 886 | {0x3c00000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 887 | {0x3c00000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 888 | {0x3c00000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 889 | {0x3c00000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3c00001}, | ||
| 890 | {0x3c00000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 891 | {0x3c00000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3c00001}, | ||
| 892 | {0x3c00000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3c00001}, | ||
| 893 | {0x3c00000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3c00081}, | ||
| 894 | {0x3c00000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3c00081}, | ||
| 895 | {0x3c00000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3c00081}, | ||
| 896 | {0x3c00000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3c00081}, | ||
| 897 | {0x3c00000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3c00081}, | ||
| 898 | {0x3c00000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3c00001}, | ||
| 899 | {0x3c00000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3c00001}, | ||
| 900 | {0x3c00000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3c00001}, | ||
| 901 | {0x3c00000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3c00001}, | ||
| 902 | {0x3c00000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 903 | {0x3c00000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3c00001}, | ||
| 904 | {0x3c00000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 905 | {0x3c00000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3c00001}, | ||
| 906 | {0x3c00000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3c00001}, | ||
| 907 | {0x3c00000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 908 | {0x3c00000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 909 | {0x3c00000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 910 | {0x3c00000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3c00001}, | ||
| 911 | {0x3c00000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 912 | {0x3c00000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3c00001}, | ||
| 913 | {0x3c00000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3c00001}, | ||
| 914 | {0x3c00000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3c00001}, | ||
| 915 | {0x3c00000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3c00001}, | ||
| 916 | {0x3c00000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3c00001}, | ||
| 917 | {0x3c00000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3c00001}, | ||
| 918 | {0x3c00000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, | ||
| 919 | {0x3c00000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, | ||
| 920 | {0x3c00000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3c00001}, | ||
| 921 | {0x3c00000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, | ||
| 922 | {0x3c00000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3c00001}, | ||
| 923 | {0x3c00000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3c00001}, | ||
| 924 | {0x3c00000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, | ||
| 925 | {0x3c00000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3c00001}, | ||
| 926 | {0x3c00000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3c00001}, | ||
| 927 | {0x3c00000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, | ||
| 928 | {0x3c00000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3c00001}, | ||
| 929 | {0x3c00000, 0x7f984a37, 0x0, 0x7fc00000, 0x3c00001}, | ||
| 930 | {0x3c00000, 0x7f984a37, 0x1, 0x7fc00000, 0x3c00081}, | ||
| 931 | {0x3c00000, 0x7f984a37, 0x76, 0x7fc00000, 0x3c00081}, | ||
| 932 | {0x3c00000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3c00081}, | ||
| 933 | {0x3c00000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3c00081}, | ||
| 934 | {0x3c00000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3c00081}, | ||
| 935 | {0x3c00000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3c00001}, | ||
| 936 | {0x3c00000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3c00001}, | ||
| 937 | {0x3c00000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3c00001}, | ||
| 938 | {0x3c00000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3c00001}, | ||
| 939 | {0x3c00000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 940 | {0x3c00000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3c00001}, | ||
| 941 | {0x3c00000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 942 | {0x3c00000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3c00001}, | ||
| 943 | {0x3c00000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3c00001}, | ||
| 944 | {0x3c00000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 945 | {0x3c00000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 946 | {0x3c00000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 947 | {0x3c00000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3c00001}, | ||
| 948 | {0x3c00000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 949 | {0x3c00000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3c00001}, | ||
| 950 | {0x3c00000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3c00001}, | ||
| 951 | {0x3c00000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3c00081}, | ||
| 952 | {0x3c00000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3c00081}, | ||
| 953 | {0x3c00000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3c00081}, | ||
| 954 | {0x3c00000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3c00081}, | ||
| 955 | {0x3c00000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3c00081}, | ||
| 956 | {0x3c00000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3c00001}, | ||
| 957 | {0x3c00000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3c00001}, | ||
| 958 | {0x3c00000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3c00001}, | ||
| 959 | {0x3c00000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3c00001}, | ||
| 960 | {0x3c00000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 961 | {0x3c00000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3c00001}, | ||
| 962 | {0x3c00000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 963 | {0x3c00000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3c00001}, | ||
| 964 | {0x3c00000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3c00001}, | ||
| 965 | {0x3c00000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 966 | {0x3c00000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 967 | {0x3c00000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 968 | {0x3c00000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3c00001}, | ||
| 969 | {0x3c00000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 970 | {0x3c00000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3c00001}, | ||
| 971 | {0x3c00000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3c00001}, | ||
| 972 | {0x3c00000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3c00001}, | ||
| 973 | {0x3c00000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3c00001}, | ||
| 974 | {0x3c00000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3c00001}, | ||
| 975 | {0x3c00000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3c00001}, | ||
| 976 | {0x3c00000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, | ||
| 977 | {0x3c00000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, | ||
| 978 | {0x3c00000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3c00001}, | ||
| 979 | {0x3c00000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, | ||
| 980 | {0x3c00000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3c00001}, | ||
| 981 | {0x3c00000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3c00001}, | ||
| 982 | {0x3c00000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, | ||
| 983 | {0x3c00000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3c00001}, | ||
| 984 | {0x3c00000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3c00001}, | ||
| 985 | {0x3c00000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, | ||
| 986 | {0x3c00000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3c00001}, | ||
| 987 | {0x3c00000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3c00001}, | ||
| 988 | {0x3c00000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3c00081}, | ||
| 989 | {0x3c00000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3c00081}, | ||
| 990 | {0x3c00000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3c00081}, | ||
| 991 | {0x3c00000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3c00081}, | ||
| 992 | {0x3c00000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3c00081}, | ||
| 993 | {0x3c00000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3c00001}, | ||
| 994 | {0x3c00000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3c00001}, | ||
| 995 | {0x3c00000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3c00001}, | ||
| 996 | {0x3c00000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3c00001}, | ||
| 997 | {0x3c00000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 998 | {0x3c00000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3c00001}, | ||
| 999 | {0x3c00000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 1000 | {0x3c00000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3c00001}, | ||
| 1001 | {0x3c00000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3c00001}, | ||
| 1002 | {0x3c00000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1003 | {0x3c00000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1004 | {0x3c00000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1005 | {0x3c00000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3c00001}, | ||
| 1006 | {0x3c00000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 1007 | {0x3c00000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3c00001}, | ||
| 1008 | {0x3c00000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3c00001}, | ||
| 1009 | {0x3c00000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3c00081}, | ||
| 1010 | {0x3c00000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3c00081}, | ||
| 1011 | {0x3c00000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3c00081}, | ||
| 1012 | {0x3c00000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3c00081}, | ||
| 1013 | {0x3c00000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3c00081}, | ||
| 1014 | {0x3c00000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3c00001}, | ||
| 1015 | {0x3c00000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3c00001}, | ||
| 1016 | {0x3c00000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3c00001}, | ||
| 1017 | {0x3c00000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3c00001}, | ||
| 1018 | {0x3c00000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 1019 | {0x3c00000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3c00001}, | ||
| 1020 | {0x3c00000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 1021 | {0x3c00000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3c00001}, | ||
| 1022 | {0x3c00000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3c00001}, | ||
| 1023 | {0x3c00000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1024 | {0x3c00000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1025 | {0x3c00000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1026 | {0x3c00000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3c00001}, | ||
| 1027 | {0x3c00000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 1028 | {0x3c00000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3c00001}, | ||
| 1029 | {0x3c00000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3c00001}, | ||
| 1030 | {0x3c00000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3c00001}, | ||
| 1031 | {0x3c00000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3c00001}, | ||
| 1032 | {0x3c00000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3c00001}, | ||
| 1033 | {0x3c00000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3c00001}, | ||
| 1034 | {0x3c00000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, | ||
| 1035 | {0x3c00000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, | ||
| 1036 | {0x3c00000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3c00001}, | ||
| 1037 | {0x3c00000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, | ||
| 1038 | {0x3c00000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3c00001}, | ||
| 1039 | {0x3c00000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3c00001}, | ||
| 1040 | {0x3c00000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, | ||
| 1041 | {0x3c00000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3c00001}, | ||
| 1042 | {0x3c00000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3c00001}, | ||
| 1043 | {0x3c00000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, | ||
| 1044 | {0x3c00000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3c00001}, | ||
| 1045 | {0x3c00000, 0x7fc00000, 0x0, 0x7fc00000, 0x3c00000}, | ||
| 1046 | {0x3c00000, 0x7fc00000, 0x1, 0x7fc00000, 0x3c00080}, | ||
| 1047 | {0x3c00000, 0x7fc00000, 0x76, 0x7fc00000, 0x3c00080}, | ||
| 1048 | {0x3c00000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3c00080}, | ||
| 1049 | {0x3c00000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3c00080}, | ||
| 1050 | {0x3c00000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3c00080}, | ||
| 1051 | {0x3c00000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3c00000}, | ||
| 1052 | {0x3c00000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3c00000}, | ||
| 1053 | {0x3c00000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3c00000}, | ||
| 1054 | {0x3c00000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3c00000}, | ||
| 1055 | {0x3c00000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 1056 | {0x3c00000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3c00000}, | ||
| 1057 | {0x3c00000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 1058 | {0x3c00000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3c00000}, | ||
| 1059 | {0x3c00000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3c00000}, | ||
| 1060 | {0x3c00000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1061 | {0x3c00000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1062 | {0x3c00000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1063 | {0x3c00000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1064 | {0x3c00000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1065 | {0x3c00000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1066 | {0x3c00000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3c00000}, | ||
| 1067 | {0x3c00000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3c00080}, | ||
| 1068 | {0x3c00000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3c00080}, | ||
| 1069 | {0x3c00000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3c00080}, | ||
| 1070 | {0x3c00000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3c00080}, | ||
| 1071 | {0x3c00000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3c00080}, | ||
| 1072 | {0x3c00000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3c00000}, | ||
| 1073 | {0x3c00000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3c00000}, | ||
| 1074 | {0x3c00000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3c00000}, | ||
| 1075 | {0x3c00000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3c00000}, | ||
| 1076 | {0x3c00000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 1077 | {0x3c00000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3c00000}, | ||
| 1078 | {0x3c00000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 1079 | {0x3c00000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3c00000}, | ||
| 1080 | {0x3c00000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3c00000}, | ||
| 1081 | {0x3c00000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1082 | {0x3c00000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1083 | {0x3c00000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1084 | {0x3c00000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1085 | {0x3c00000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1086 | {0x3c00000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1087 | {0x3c00000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3c00000}, | ||
| 1088 | {0x3c00000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3c00000}, | ||
| 1089 | {0x3c00000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3c00000}, | ||
| 1090 | {0x3c00000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3c00000}, | ||
| 1091 | {0x3c00000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3c00000}, | ||
| 1092 | {0x3c00000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, | ||
| 1093 | {0x3c00000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, | ||
| 1094 | {0x3c00000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3c00000}, | ||
| 1095 | {0x3c00000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, | ||
| 1096 | {0x3c00000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3c00000}, | ||
| 1097 | {0x3c00000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3c00000}, | ||
| 1098 | {0x3c00000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, | ||
| 1099 | {0x3c00000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3c00000}, | ||
| 1100 | {0x3c00000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3c00000}, | ||
| 1101 | {0x3c00000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, | ||
| 1102 | {0x3c00000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3c00000}, | ||
| 1103 | {0x3c00000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3c00000}, | ||
| 1104 | {0x3c00000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3c00080}, | ||
| 1105 | {0x3c00000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3c00080}, | ||
| 1106 | {0x3c00000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3c00080}, | ||
| 1107 | {0x3c00000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3c00080}, | ||
| 1108 | {0x3c00000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3c00080}, | ||
| 1109 | {0x3c00000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3c00000}, | ||
| 1110 | {0x3c00000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3c00000}, | ||
| 1111 | {0x3c00000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3c00000}, | ||
| 1112 | {0x3c00000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3c00000}, | ||
| 1113 | {0x3c00000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 1114 | {0x3c00000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3c00000}, | ||
| 1115 | {0x3c00000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 1116 | {0x3c00000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3c00000}, | ||
| 1117 | {0x3c00000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3c00000}, | ||
| 1118 | {0x3c00000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1119 | {0x3c00000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1120 | {0x3c00000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1121 | {0x3c00000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1122 | {0x3c00000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1123 | {0x3c00000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1124 | {0x3c00000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3c00000}, | ||
| 1125 | {0x3c00000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3c00080}, | ||
| 1126 | {0x3c00000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3c00080}, | ||
| 1127 | {0x3c00000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3c00080}, | ||
| 1128 | {0x3c00000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3c00080}, | ||
| 1129 | {0x3c00000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3c00080}, | ||
| 1130 | {0x3c00000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3c00000}, | ||
| 1131 | {0x3c00000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3c00000}, | ||
| 1132 | {0x3c00000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3c00000}, | ||
| 1133 | {0x3c00000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3c00000}, | ||
| 1134 | {0x3c00000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 1135 | {0x3c00000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3c00000}, | ||
| 1136 | {0x3c00000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 1137 | {0x3c00000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3c00000}, | ||
| 1138 | {0x3c00000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3c00000}, | ||
| 1139 | {0x3c00000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1140 | {0x3c00000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1141 | {0x3c00000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1142 | {0x3c00000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1143 | {0x3c00000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1144 | {0x3c00000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1145 | {0x3c00000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3c00000}, | ||
| 1146 | {0x3c00000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3c00000}, | ||
| 1147 | {0x3c00000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3c00000}, | ||
| 1148 | {0x3c00000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3c00000}, | ||
| 1149 | {0x3c00000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3c00000}, | ||
| 1150 | {0x3c00000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, | ||
| 1151 | {0x3c00000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, | ||
| 1152 | {0x3c00000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3c00000}, | ||
| 1153 | {0x3c00000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, | ||
| 1154 | {0x3c00000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3c00000}, | ||
| 1155 | {0x3c00000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3c00000}, | ||
| 1156 | {0x3c00000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, | ||
| 1157 | {0x3c00000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3c00000}, | ||
| 1158 | {0x3c00000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3c00000}, | ||
| 1159 | {0x3c00000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, | ||
| 1160 | {0x3c00000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3c00000}, | ||
| 1161 | {0x3c00000, 0x7fffffff, 0x0, 0x7fc00000, 0x3c00000}, | ||
| 1162 | {0x3c00000, 0x7fffffff, 0x1, 0x7fc00000, 0x3c00080}, | ||
| 1163 | {0x3c00000, 0x7fffffff, 0x76, 0x7fc00000, 0x3c00080}, | ||
| 1164 | {0x3c00000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3c00080}, | ||
| 1165 | {0x3c00000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3c00080}, | ||
| 1166 | {0x3c00000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3c00080}, | ||
| 1167 | {0x3c00000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3c00000}, | ||
| 1168 | {0x3c00000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3c00000}, | ||
| 1169 | {0x3c00000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3c00000}, | ||
| 1170 | {0x3c00000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3c00000}, | ||
| 1171 | {0x3c00000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 1172 | {0x3c00000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3c00000}, | ||
| 1173 | {0x3c00000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 1174 | {0x3c00000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3c00000}, | ||
| 1175 | {0x3c00000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3c00000}, | ||
| 1176 | {0x3c00000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1177 | {0x3c00000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1178 | {0x3c00000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1179 | {0x3c00000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1180 | {0x3c00000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1181 | {0x3c00000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1182 | {0x3c00000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3c00000}, | ||
| 1183 | {0x3c00000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3c00080}, | ||
| 1184 | {0x3c00000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3c00080}, | ||
| 1185 | {0x3c00000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3c00080}, | ||
| 1186 | {0x3c00000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3c00080}, | ||
| 1187 | {0x3c00000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3c00080}, | ||
| 1188 | {0x3c00000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3c00000}, | ||
| 1189 | {0x3c00000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3c00000}, | ||
| 1190 | {0x3c00000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3c00000}, | ||
| 1191 | {0x3c00000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3c00000}, | ||
| 1192 | {0x3c00000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 1193 | {0x3c00000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3c00000}, | ||
| 1194 | {0x3c00000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 1195 | {0x3c00000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3c00000}, | ||
| 1196 | {0x3c00000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3c00000}, | ||
| 1197 | {0x3c00000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1198 | {0x3c00000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1199 | {0x3c00000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1200 | {0x3c00000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1201 | {0x3c00000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1202 | {0x3c00000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1203 | {0x3c00000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3c00000}, | ||
| 1204 | {0x3c00000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3c00000}, | ||
| 1205 | {0x3c00000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3c00000}, | ||
| 1206 | {0x3c00000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3c00000}, | ||
| 1207 | {0x3c00000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3c00000}, | ||
| 1208 | {0x3c00000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, | ||
| 1209 | {0x3c00000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, | ||
| 1210 | {0x3c00000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3c00000}, | ||
| 1211 | {0x3c00000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, | ||
| 1212 | {0x3c00000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3c00000}, | ||
| 1213 | {0x3c00000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3c00000}, | ||
| 1214 | {0x3c00000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, | ||
| 1215 | {0x3c00000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3c00000}, | ||
| 1216 | {0x3c00000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3c00000}, | ||
| 1217 | {0x3c00000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, | ||
| 1218 | {0x3c00000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3c00000}, | ||
| 1219 | {0x3c00000, 0x80000000, 0x0, 0x0, 0x3c00000}, | ||
| 1220 | {0x3c00000, 0x80000000, 0x1, 0x0, 0x3c00080}, | ||
| 1221 | {0x3c00000, 0x80000000, 0x76, 0x0, 0x3c00080}, | ||
| 1222 | {0x3c00000, 0x80000000, 0x2b94, 0x0, 0x3c00080}, | ||
| 1223 | {0x3c00000, 0x80000000, 0x636d24, 0x0, 0x3c00080}, | ||
| 1224 | {0x3c00000, 0x80000000, 0x7fffff, 0x0, 0x3c00080}, | ||
| 1225 | {0x3c00000, 0x80000000, 0x800000, 0x800000, 0x3c00000}, | ||
| 1226 | {0x3c00000, 0x80000000, 0x800002, 0x800002, 0x3c00000}, | ||
| 1227 | {0x3c00000, 0x80000000, 0x1398437, 0x1398437, 0x3c00000}, | ||
| 1228 | {0x3c00000, 0x80000000, 0xba98d27, 0xba98d27, 0x3c00000}, | ||
| 1229 | {0x3c00000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3c00000}, | ||
| 1230 | {0x3c00000, 0x80000000, 0x751f853a, 0x751f853a, 0x3c00000}, | ||
| 1231 | {0x3c00000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3c00000}, | ||
| 1232 | {0x3c00000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3c00000}, | ||
| 1233 | {0x3c00000, 0x80000000, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1234 | {0x3c00000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1235 | {0x3c00000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1236 | {0x3c00000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1237 | {0x3c00000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1238 | {0x3c00000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1239 | {0x3c00000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1240 | {0x3c00000, 0x80000000, 0x80000000, 0x80000000, 0x3c00000}, | ||
| 1241 | {0x3c00000, 0x80000000, 0x80000001, 0x0, 0x3c00080}, | ||
| 1242 | {0x3c00000, 0x80000000, 0x80000076, 0x0, 0x3c00080}, | ||
| 1243 | {0x3c00000, 0x80000000, 0x80002b94, 0x0, 0x3c00080}, | ||
| 1244 | {0x3c00000, 0x80000000, 0x80636d24, 0x0, 0x3c00080}, | ||
| 1245 | {0x3c00000, 0x80000000, 0x807fffff, 0x0, 0x3c00080}, | ||
| 1246 | {0x3c00000, 0x80000000, 0x80800000, 0x80800000, 0x3c00000}, | ||
| 1247 | {0x3c00000, 0x80000000, 0x80800002, 0x80800002, 0x3c00000}, | ||
| 1248 | {0x3c00000, 0x80000000, 0x81398437, 0x81398437, 0x3c00000}, | ||
| 1249 | {0x3c00000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3c00000}, | ||
| 1250 | {0x3c00000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3c00000}, | ||
| 1251 | {0x3c00000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3c00000}, | ||
| 1252 | {0x3c00000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3c00000}, | ||
| 1253 | {0x3c00000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3c00000}, | ||
| 1254 | {0x3c00000, 0x80000000, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 1255 | {0x3c00000, 0x80000000, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1256 | {0x3c00000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1257 | {0x3c00000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1258 | {0x3c00000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1259 | {0x3c00000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1260 | {0x3c00000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1261 | {0x3c00000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3c00000}, | ||
| 1262 | {0x3c00000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3c00000}, | ||
| 1263 | {0x3c00000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3c00000}, | ||
| 1264 | {0x3c00000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3c00000}, | ||
| 1265 | {0x3c00000, 0x80000000, 0x9503366, 0x9503366, 0x3c00000}, | ||
| 1266 | {0x3c00000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3c00000}, | ||
| 1267 | {0x3c00000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3c00000}, | ||
| 1268 | {0x3c00000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3c00000}, | ||
| 1269 | {0x3c00000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3c00000}, | ||
| 1270 | {0x3c00000, 0x80000000, 0x966320b, 0x966320b, 0x3c00000}, | ||
| 1271 | {0x3c00000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3c00000}, | ||
| 1272 | {0x3c00000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00000}, | ||
| 1273 | {0x3c00000, 0x80000000, 0x317285d3, 0x317285d3, 0x3c00000}, | ||
| 1274 | {0x3c00000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3c00000}, | ||
| 1275 | {0x3c00000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3c00000}, | ||
| 1276 | {0x3c00000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3c00000}, | ||
| 1277 | {0x3c00000, 0x80000001, 0x0, 0x0, 0x3c00080}, | ||
| 1278 | {0x3c00000, 0x80000001, 0x1, 0x0, 0x3c00080}, | ||
| 1279 | {0x3c00000, 0x80000001, 0x76, 0x0, 0x3c00080}, | ||
| 1280 | {0x3c00000, 0x80000001, 0x2b94, 0x0, 0x3c00080}, | ||
| 1281 | {0x3c00000, 0x80000001, 0x636d24, 0x0, 0x3c00080}, | ||
| 1282 | {0x3c00000, 0x80000001, 0x7fffff, 0x0, 0x3c00080}, | ||
| 1283 | {0x3c00000, 0x80000001, 0x800000, 0x800000, 0x3c00080}, | ||
| 1284 | {0x3c00000, 0x80000001, 0x800002, 0x800002, 0x3c00080}, | ||
| 1285 | {0x3c00000, 0x80000001, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 1286 | {0x3c00000, 0x80000001, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 1287 | {0x3c00000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 1288 | {0x3c00000, 0x80000001, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 1289 | {0x3c00000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 1290 | {0x3c00000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 1291 | {0x3c00000, 0x80000001, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 1292 | {0x3c00000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 1293 | {0x3c00000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 1294 | {0x3c00000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1295 | {0x3c00000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 1296 | {0x3c00000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1297 | {0x3c00000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 1298 | {0x3c00000, 0x80000001, 0x80000000, 0x0, 0x3c00080}, | ||
| 1299 | {0x3c00000, 0x80000001, 0x80000001, 0x0, 0x3c00080}, | ||
| 1300 | {0x3c00000, 0x80000001, 0x80000076, 0x0, 0x3c00080}, | ||
| 1301 | {0x3c00000, 0x80000001, 0x80002b94, 0x0, 0x3c00080}, | ||
| 1302 | {0x3c00000, 0x80000001, 0x80636d24, 0x0, 0x3c00080}, | ||
| 1303 | {0x3c00000, 0x80000001, 0x807fffff, 0x0, 0x3c00080}, | ||
| 1304 | {0x3c00000, 0x80000001, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 1305 | {0x3c00000, 0x80000001, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 1306 | {0x3c00000, 0x80000001, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 1307 | {0x3c00000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 1308 | {0x3c00000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 1309 | {0x3c00000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 1310 | {0x3c00000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 1311 | {0x3c00000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 1312 | {0x3c00000, 0x80000001, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 1313 | {0x3c00000, 0x80000001, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 1314 | {0x3c00000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 1315 | {0x3c00000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1316 | {0x3c00000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 1317 | {0x3c00000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1318 | {0x3c00000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 1319 | {0x3c00000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 1320 | {0x3c00000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 1321 | {0x3c00000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 1322 | {0x3c00000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 1323 | {0x3c00000, 0x80000001, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 1324 | {0x3c00000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 1325 | {0x3c00000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 1326 | {0x3c00000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 1327 | {0x3c00000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 1328 | {0x3c00000, 0x80000001, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 1329 | {0x3c00000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 1330 | {0x3c00000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 1331 | {0x3c00000, 0x80000001, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 1332 | {0x3c00000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 1333 | {0x3c00000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 1334 | {0x3c00000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 1335 | {0x3c00000, 0x80000076, 0x0, 0x0, 0x3c00080}, | ||
| 1336 | {0x3c00000, 0x80000076, 0x1, 0x0, 0x3c00080}, | ||
| 1337 | {0x3c00000, 0x80000076, 0x76, 0x0, 0x3c00080}, | ||
| 1338 | {0x3c00000, 0x80000076, 0x2b94, 0x0, 0x3c00080}, | ||
| 1339 | {0x3c00000, 0x80000076, 0x636d24, 0x0, 0x3c00080}, | ||
| 1340 | {0x3c00000, 0x80000076, 0x7fffff, 0x0, 0x3c00080}, | ||
| 1341 | {0x3c00000, 0x80000076, 0x800000, 0x800000, 0x3c00080}, | ||
| 1342 | {0x3c00000, 0x80000076, 0x800002, 0x800002, 0x3c00080}, | ||
| 1343 | {0x3c00000, 0x80000076, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 1344 | {0x3c00000, 0x80000076, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 1345 | {0x3c00000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 1346 | {0x3c00000, 0x80000076, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 1347 | {0x3c00000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 1348 | {0x3c00000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 1349 | {0x3c00000, 0x80000076, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 1350 | {0x3c00000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 1351 | {0x3c00000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 1352 | {0x3c00000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1353 | {0x3c00000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 1354 | {0x3c00000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1355 | {0x3c00000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 1356 | {0x3c00000, 0x80000076, 0x80000000, 0x0, 0x3c00080}, | ||
| 1357 | {0x3c00000, 0x80000076, 0x80000001, 0x0, 0x3c00080}, | ||
| 1358 | {0x3c00000, 0x80000076, 0x80000076, 0x0, 0x3c00080}, | ||
| 1359 | {0x3c00000, 0x80000076, 0x80002b94, 0x0, 0x3c00080}, | ||
| 1360 | {0x3c00000, 0x80000076, 0x80636d24, 0x0, 0x3c00080}, | ||
| 1361 | {0x3c00000, 0x80000076, 0x807fffff, 0x0, 0x3c00080}, | ||
| 1362 | {0x3c00000, 0x80000076, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 1363 | {0x3c00000, 0x80000076, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 1364 | {0x3c00000, 0x80000076, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 1365 | {0x3c00000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 1366 | {0x3c00000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 1367 | {0x3c00000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 1368 | {0x3c00000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 1369 | {0x3c00000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 1370 | {0x3c00000, 0x80000076, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 1371 | {0x3c00000, 0x80000076, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 1372 | {0x3c00000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 1373 | {0x3c00000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1374 | {0x3c00000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 1375 | {0x3c00000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1376 | {0x3c00000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 1377 | {0x3c00000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 1378 | {0x3c00000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 1379 | {0x3c00000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 1380 | {0x3c00000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 1381 | {0x3c00000, 0x80000076, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 1382 | {0x3c00000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 1383 | {0x3c00000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 1384 | {0x3c00000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 1385 | {0x3c00000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 1386 | {0x3c00000, 0x80000076, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 1387 | {0x3c00000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 1388 | {0x3c00000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 1389 | {0x3c00000, 0x80000076, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 1390 | {0x3c00000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 1391 | {0x3c00000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 1392 | {0x3c00000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 1393 | {0x3c00000, 0x80002b94, 0x0, 0x0, 0x3c00080}, | ||
| 1394 | {0x3c00000, 0x80002b94, 0x1, 0x0, 0x3c00080}, | ||
| 1395 | {0x3c00000, 0x80002b94, 0x76, 0x0, 0x3c00080}, | ||
| 1396 | {0x3c00000, 0x80002b94, 0x2b94, 0x0, 0x3c00080}, | ||
| 1397 | {0x3c00000, 0x80002b94, 0x636d24, 0x0, 0x3c00080}, | ||
| 1398 | {0x3c00000, 0x80002b94, 0x7fffff, 0x0, 0x3c00080}, | ||
| 1399 | {0x3c00000, 0x80002b94, 0x800000, 0x800000, 0x3c00080}, | ||
| 1400 | {0x3c00000, 0x80002b94, 0x800002, 0x800002, 0x3c00080}, | ||
| 1401 | {0x3c00000, 0x80002b94, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 1402 | {0x3c00000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 1403 | {0x3c00000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 1404 | {0x3c00000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 1405 | {0x3c00000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 1406 | {0x3c00000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 1407 | {0x3c00000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 1408 | {0x3c00000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 1409 | {0x3c00000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 1410 | {0x3c00000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1411 | {0x3c00000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 1412 | {0x3c00000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1413 | {0x3c00000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 1414 | {0x3c00000, 0x80002b94, 0x80000000, 0x0, 0x3c00080}, | ||
| 1415 | {0x3c00000, 0x80002b94, 0x80000001, 0x0, 0x3c00080}, | ||
| 1416 | {0x3c00000, 0x80002b94, 0x80000076, 0x0, 0x3c00080}, | ||
| 1417 | {0x3c00000, 0x80002b94, 0x80002b94, 0x0, 0x3c00080}, | ||
| 1418 | {0x3c00000, 0x80002b94, 0x80636d24, 0x0, 0x3c00080}, | ||
| 1419 | {0x3c00000, 0x80002b94, 0x807fffff, 0x0, 0x3c00080}, | ||
| 1420 | {0x3c00000, 0x80002b94, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 1421 | {0x3c00000, 0x80002b94, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 1422 | {0x3c00000, 0x80002b94, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 1423 | {0x3c00000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 1424 | {0x3c00000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 1425 | {0x3c00000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 1426 | {0x3c00000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 1427 | {0x3c00000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 1428 | {0x3c00000, 0x80002b94, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 1429 | {0x3c00000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 1430 | {0x3c00000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 1431 | {0x3c00000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1432 | {0x3c00000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 1433 | {0x3c00000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1434 | {0x3c00000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 1435 | {0x3c00000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 1436 | {0x3c00000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 1437 | {0x3c00000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 1438 | {0x3c00000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 1439 | {0x3c00000, 0x80002b94, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 1440 | {0x3c00000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 1441 | {0x3c00000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 1442 | {0x3c00000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 1443 | {0x3c00000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 1444 | {0x3c00000, 0x80002b94, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 1445 | {0x3c00000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 1446 | {0x3c00000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 1447 | {0x3c00000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 1448 | {0x3c00000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 1449 | {0x3c00000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 1450 | {0x3c00000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 1451 | {0x3c00000, 0x80636d24, 0x0, 0x0, 0x3c00080}, | ||
| 1452 | {0x3c00000, 0x80636d24, 0x1, 0x0, 0x3c00080}, | ||
| 1453 | {0x3c00000, 0x80636d24, 0x76, 0x0, 0x3c00080}, | ||
| 1454 | {0x3c00000, 0x80636d24, 0x2b94, 0x0, 0x3c00080}, | ||
| 1455 | {0x3c00000, 0x80636d24, 0x636d24, 0x0, 0x3c00080}, | ||
| 1456 | {0x3c00000, 0x80636d24, 0x7fffff, 0x0, 0x3c00080}, | ||
| 1457 | {0x3c00000, 0x80636d24, 0x800000, 0x800000, 0x3c00080}, | ||
| 1458 | {0x3c00000, 0x80636d24, 0x800002, 0x800002, 0x3c00080}, | ||
| 1459 | {0x3c00000, 0x80636d24, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 1460 | {0x3c00000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 1461 | {0x3c00000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 1462 | {0x3c00000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 1463 | {0x3c00000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 1464 | {0x3c00000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 1465 | {0x3c00000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 1466 | {0x3c00000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 1467 | {0x3c00000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 1468 | {0x3c00000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1469 | {0x3c00000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 1470 | {0x3c00000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1471 | {0x3c00000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 1472 | {0x3c00000, 0x80636d24, 0x80000000, 0x0, 0x3c00080}, | ||
| 1473 | {0x3c00000, 0x80636d24, 0x80000001, 0x0, 0x3c00080}, | ||
| 1474 | {0x3c00000, 0x80636d24, 0x80000076, 0x0, 0x3c00080}, | ||
| 1475 | {0x3c00000, 0x80636d24, 0x80002b94, 0x0, 0x3c00080}, | ||
| 1476 | {0x3c00000, 0x80636d24, 0x80636d24, 0x0, 0x3c00080}, | ||
| 1477 | {0x3c00000, 0x80636d24, 0x807fffff, 0x0, 0x3c00080}, | ||
| 1478 | {0x3c00000, 0x80636d24, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 1479 | {0x3c00000, 0x80636d24, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 1480 | {0x3c00000, 0x80636d24, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 1481 | {0x3c00000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 1482 | {0x3c00000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 1483 | {0x3c00000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 1484 | {0x3c00000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 1485 | {0x3c00000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 1486 | {0x3c00000, 0x80636d24, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 1487 | {0x3c00000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 1488 | {0x3c00000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 1489 | {0x3c00000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1490 | {0x3c00000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 1491 | {0x3c00000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1492 | {0x3c00000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 1493 | {0x3c00000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 1494 | {0x3c00000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 1495 | {0x3c00000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 1496 | {0x3c00000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 1497 | {0x3c00000, 0x80636d24, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 1498 | {0x3c00000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 1499 | {0x3c00000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 1500 | {0x3c00000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 1501 | {0x3c00000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 1502 | {0x3c00000, 0x80636d24, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 1503 | {0x3c00000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 1504 | {0x3c00000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 1505 | {0x3c00000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 1506 | {0x3c00000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 1507 | {0x3c00000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 1508 | {0x3c00000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 1509 | {0x3c00000, 0x807fffff, 0x0, 0x0, 0x3c00080}, | ||
| 1510 | {0x3c00000, 0x807fffff, 0x1, 0x0, 0x3c00080}, | ||
| 1511 | {0x3c00000, 0x807fffff, 0x76, 0x0, 0x3c00080}, | ||
| 1512 | {0x3c00000, 0x807fffff, 0x2b94, 0x0, 0x3c00080}, | ||
| 1513 | {0x3c00000, 0x807fffff, 0x636d24, 0x0, 0x3c00080}, | ||
| 1514 | {0x3c00000, 0x807fffff, 0x7fffff, 0x0, 0x3c00080}, | ||
| 1515 | {0x3c00000, 0x807fffff, 0x800000, 0x800000, 0x3c00080}, | ||
| 1516 | {0x3c00000, 0x807fffff, 0x800002, 0x800002, 0x3c00080}, | ||
| 1517 | {0x3c00000, 0x807fffff, 0x1398437, 0x1398437, 0x3c00080}, | ||
| 1518 | {0x3c00000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3c00080}, | ||
| 1519 | {0x3c00000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3c00080}, | ||
| 1520 | {0x3c00000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3c00080}, | ||
| 1521 | {0x3c00000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, | ||
| 1522 | {0x3c00000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, | ||
| 1523 | {0x3c00000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3c00080}, | ||
| 1524 | {0x3c00000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3c00081}, | ||
| 1525 | {0x3c00000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3c00081}, | ||
| 1526 | {0x3c00000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1527 | {0x3c00000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3c00080}, | ||
| 1528 | {0x3c00000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1529 | {0x3c00000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3c00080}, | ||
| 1530 | {0x3c00000, 0x807fffff, 0x80000000, 0x0, 0x3c00080}, | ||
| 1531 | {0x3c00000, 0x807fffff, 0x80000001, 0x0, 0x3c00080}, | ||
| 1532 | {0x3c00000, 0x807fffff, 0x80000076, 0x0, 0x3c00080}, | ||
| 1533 | {0x3c00000, 0x807fffff, 0x80002b94, 0x0, 0x3c00080}, | ||
| 1534 | {0x3c00000, 0x807fffff, 0x80636d24, 0x0, 0x3c00080}, | ||
| 1535 | {0x3c00000, 0x807fffff, 0x807fffff, 0x0, 0x3c00080}, | ||
| 1536 | {0x3c00000, 0x807fffff, 0x80800000, 0x80800000, 0x3c00080}, | ||
| 1537 | {0x3c00000, 0x807fffff, 0x80800002, 0x80800002, 0x3c00080}, | ||
| 1538 | {0x3c00000, 0x807fffff, 0x81398437, 0x81398437, 0x3c00080}, | ||
| 1539 | {0x3c00000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, | ||
| 1540 | {0x3c00000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, | ||
| 1541 | {0x3c00000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3c00080}, | ||
| 1542 | {0x3c00000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, | ||
| 1543 | {0x3c00000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3c00080}, | ||
| 1544 | {0x3c00000, 0x807fffff, 0xff800000, 0xff800000, 0x3c00080}, | ||
| 1545 | {0x3c00000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3c00081}, | ||
| 1546 | {0x3c00000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3c00081}, | ||
| 1547 | {0x3c00000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3c00081}, | ||
| 1548 | {0x3c00000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3c00080}, | ||
| 1549 | {0x3c00000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3c00080}, | ||
| 1550 | {0x3c00000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3c00080}, | ||
| 1551 | {0x3c00000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, | ||
| 1552 | {0x3c00000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3c00080}, | ||
| 1553 | {0x3c00000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, | ||
| 1554 | {0x3c00000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, | ||
| 1555 | {0x3c00000, 0x807fffff, 0x9503366, 0x9503366, 0x3c00080}, | ||
| 1556 | {0x3c00000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, | ||
| 1557 | {0x3c00000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, | ||
| 1558 | {0x3c00000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, | ||
| 1559 | {0x3c00000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, | ||
| 1560 | {0x3c00000, 0x807fffff, 0x966320b, 0x966320b, 0x3c00080}, | ||
| 1561 | {0x3c00000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3c00080}, | ||
| 1562 | {0x3c00000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, | ||
| 1563 | {0x3c00000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3c00080}, | ||
| 1564 | {0x3c00000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, | ||
| 1565 | {0x3c00000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, | ||
| 1566 | {0x3c00000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, | ||
| 1567 | {0x3c00000, 0x80800000, 0x0, 0x80800000, 0x3c00000}, | ||
| 1568 | {0x3c00000, 0x80800000, 0x1, 0x80800000, 0x3c00080}, | ||
| 1569 | {0x3c00000, 0x80800000, 0x76, 0x80800000, 0x3c00080}, | ||
| 1570 | {0x3c00000, 0x80800000, 0x2b94, 0x80800000, 0x3c00080}, | ||
| 1571 | {0x3c00000, 0x80800000, 0x636d24, 0x80800000, 0x3c00080}, | ||
| 1572 | {0x3c00000, 0x80800000, 0x7fffff, 0x80800000, 0x3c00080}, | ||
| 1573 | {0x3c00000, 0x80800000, 0x800000, 0x0, 0x3c00000}, | ||
| 1574 | {0x3c00000, 0x80800000, 0x800002, 0x0, 0x3c00008}, | ||
| 1575 | {0x3c00000, 0x80800000, 0x1398437, 0xf3086e, 0x3c00000}, | ||
| 1576 | {0x3c00000, 0x80800000, 0xba98d27, 0xba98d25, 0x3c00000}, | ||
| 1577 | {0x3c00000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3c00000}, | ||
| 1578 | {0x3c00000, 0x80800000, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 1579 | {0x3c00000, 0x80800000, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 1580 | {0x3c00000, 0x80800000, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 1581 | {0x3c00000, 0x80800000, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1582 | {0x3c00000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1583 | {0x3c00000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1584 | {0x3c00000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1585 | {0x3c00000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1586 | {0x3c00000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1587 | {0x3c00000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1588 | {0x3c00000, 0x80800000, 0x80000000, 0x80800000, 0x3c00000}, | ||
| 1589 | {0x3c00000, 0x80800000, 0x80000001, 0x80800000, 0x3c00080}, | ||
| 1590 | {0x3c00000, 0x80800000, 0x80000076, 0x80800000, 0x3c00080}, | ||
| 1591 | {0x3c00000, 0x80800000, 0x80002b94, 0x80800000, 0x3c00080}, | ||
| 1592 | {0x3c00000, 0x80800000, 0x80636d24, 0x80800000, 0x3c00080}, | ||
| 1593 | {0x3c00000, 0x80800000, 0x807fffff, 0x80800000, 0x3c00080}, | ||
| 1594 | {0x3c00000, 0x80800000, 0x80800000, 0x81000000, 0x3c00000}, | ||
| 1595 | {0x3c00000, 0x80800000, 0x80800002, 0x81000001, 0x3c00000}, | ||
| 1596 | {0x3c00000, 0x80800000, 0x81398437, 0x81798437, 0x3c00000}, | ||
| 1597 | {0x3c00000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3c00000}, | ||
| 1598 | {0x3c00000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3c00000}, | ||
| 1599 | {0x3c00000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 1600 | {0x3c00000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 1601 | {0x3c00000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 1602 | {0x3c00000, 0x80800000, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 1603 | {0x3c00000, 0x80800000, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1604 | {0x3c00000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1605 | {0x3c00000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1606 | {0x3c00000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1607 | {0x3c00000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1608 | {0x3c00000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1609 | {0x3c00000, 0x80800000, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 1610 | {0x3c00000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 1611 | {0x3c00000, 0x80800000, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 1612 | {0x3c00000, 0x80800000, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 1613 | {0x3c00000, 0x80800000, 0x9503366, 0x9503326, 0x3c00000}, | ||
| 1614 | {0x3c00000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, | ||
| 1615 | {0x3c00000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 1616 | {0x3c00000, 0x80800000, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 1617 | {0x3c00000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, | ||
| 1618 | {0x3c00000, 0x80800000, 0x966320b, 0x96631cb, 0x3c00000}, | ||
| 1619 | {0x3c00000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3c00010}, | ||
| 1620 | {0x3c00000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, | ||
| 1621 | {0x3c00000, 0x80800000, 0x317285d3, 0x317285d2, 0x3c00010}, | ||
| 1622 | {0x3c00000, 0x80800000, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, | ||
| 1623 | {0x3c00000, 0x80800000, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 1624 | {0x3c00000, 0x80800000, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 1625 | {0x3c00000, 0x80800002, 0x0, 0x80800002, 0x3c00000}, | ||
| 1626 | {0x3c00000, 0x80800002, 0x1, 0x80800002, 0x3c00080}, | ||
| 1627 | {0x3c00000, 0x80800002, 0x76, 0x80800002, 0x3c00080}, | ||
| 1628 | {0x3c00000, 0x80800002, 0x2b94, 0x80800002, 0x3c00080}, | ||
| 1629 | {0x3c00000, 0x80800002, 0x636d24, 0x80800002, 0x3c00080}, | ||
| 1630 | {0x3c00000, 0x80800002, 0x7fffff, 0x80800002, 0x3c00080}, | ||
| 1631 | {0x3c00000, 0x80800002, 0x800000, 0x0, 0x3c00008}, | ||
| 1632 | {0x3c00000, 0x80800002, 0x800002, 0x0, 0x3c00000}, | ||
| 1633 | {0x3c00000, 0x80800002, 0x1398437, 0xf3086c, 0x3c00000}, | ||
| 1634 | {0x3c00000, 0x80800002, 0xba98d27, 0xba98d24, 0x3c00010}, | ||
| 1635 | {0x3c00000, 0x80800002, 0xba98d7a, 0xba98d77, 0x3c00010}, | ||
| 1636 | {0x3c00000, 0x80800002, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 1637 | {0x3c00000, 0x80800002, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 1638 | {0x3c00000, 0x80800002, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 1639 | {0x3c00000, 0x80800002, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1640 | {0x3c00000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1641 | {0x3c00000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1642 | {0x3c00000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1643 | {0x3c00000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1644 | {0x3c00000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1645 | {0x3c00000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1646 | {0x3c00000, 0x80800002, 0x80000000, 0x80800002, 0x3c00000}, | ||
| 1647 | {0x3c00000, 0x80800002, 0x80000001, 0x80800002, 0x3c00080}, | ||
| 1648 | {0x3c00000, 0x80800002, 0x80000076, 0x80800002, 0x3c00080}, | ||
| 1649 | {0x3c00000, 0x80800002, 0x80002b94, 0x80800002, 0x3c00080}, | ||
| 1650 | {0x3c00000, 0x80800002, 0x80636d24, 0x80800002, 0x3c00080}, | ||
| 1651 | {0x3c00000, 0x80800002, 0x807fffff, 0x80800002, 0x3c00080}, | ||
| 1652 | {0x3c00000, 0x80800002, 0x80800000, 0x81000001, 0x3c00000}, | ||
| 1653 | {0x3c00000, 0x80800002, 0x80800002, 0x81000002, 0x3c00000}, | ||
| 1654 | {0x3c00000, 0x80800002, 0x81398437, 0x81798438, 0x3c00000}, | ||
| 1655 | {0x3c00000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3c00010}, | ||
| 1656 | {0x3c00000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3c00010}, | ||
| 1657 | {0x3c00000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 1658 | {0x3c00000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 1659 | {0x3c00000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 1660 | {0x3c00000, 0x80800002, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 1661 | {0x3c00000, 0x80800002, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1662 | {0x3c00000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1663 | {0x3c00000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1664 | {0x3c00000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1665 | {0x3c00000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1666 | {0x3c00000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1667 | {0x3c00000, 0x80800002, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 1668 | {0x3c00000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 1669 | {0x3c00000, 0x80800002, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 1670 | {0x3c00000, 0x80800002, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 1671 | {0x3c00000, 0x80800002, 0x9503366, 0x9503325, 0x3c00010}, | ||
| 1672 | {0x3c00000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, | ||
| 1673 | {0x3c00000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 1674 | {0x3c00000, 0x80800002, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 1675 | {0x3c00000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, | ||
| 1676 | {0x3c00000, 0x80800002, 0x966320b, 0x96631ca, 0x3c00010}, | ||
| 1677 | {0x3c00000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3c00010}, | ||
| 1678 | {0x3c00000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, | ||
| 1679 | {0x3c00000, 0x80800002, 0x317285d3, 0x317285d2, 0x3c00010}, | ||
| 1680 | {0x3c00000, 0x80800002, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, | ||
| 1681 | {0x3c00000, 0x80800002, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 1682 | {0x3c00000, 0x80800002, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 1683 | {0x3c00000, 0x81398437, 0x0, 0x81398437, 0x3c00000}, | ||
| 1684 | {0x3c00000, 0x81398437, 0x1, 0x81398437, 0x3c00080}, | ||
| 1685 | {0x3c00000, 0x81398437, 0x76, 0x81398437, 0x3c00080}, | ||
| 1686 | {0x3c00000, 0x81398437, 0x2b94, 0x81398437, 0x3c00080}, | ||
| 1687 | {0x3c00000, 0x81398437, 0x636d24, 0x81398437, 0x3c00080}, | ||
| 1688 | {0x3c00000, 0x81398437, 0x7fffff, 0x81398437, 0x3c00080}, | ||
| 1689 | {0x3c00000, 0x81398437, 0x800000, 0x80f3086e, 0x3c00000}, | ||
| 1690 | {0x3c00000, 0x81398437, 0x800002, 0x80f3086c, 0x3c00000}, | ||
| 1691 | {0x3c00000, 0x81398437, 0x1398437, 0x0, 0x3c00000}, | ||
| 1692 | {0x3c00000, 0x81398437, 0xba98d27, 0xba98d21, 0x3c00010}, | ||
| 1693 | {0x3c00000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3c00010}, | ||
| 1694 | {0x3c00000, 0x81398437, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 1695 | {0x3c00000, 0x81398437, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 1696 | {0x3c00000, 0x81398437, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 1697 | {0x3c00000, 0x81398437, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1698 | {0x3c00000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1699 | {0x3c00000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1700 | {0x3c00000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1701 | {0x3c00000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1702 | {0x3c00000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1703 | {0x3c00000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1704 | {0x3c00000, 0x81398437, 0x80000000, 0x81398437, 0x3c00000}, | ||
| 1705 | {0x3c00000, 0x81398437, 0x80000001, 0x81398437, 0x3c00080}, | ||
| 1706 | {0x3c00000, 0x81398437, 0x80000076, 0x81398437, 0x3c00080}, | ||
| 1707 | {0x3c00000, 0x81398437, 0x80002b94, 0x81398437, 0x3c00080}, | ||
| 1708 | {0x3c00000, 0x81398437, 0x80636d24, 0x81398437, 0x3c00080}, | ||
| 1709 | {0x3c00000, 0x81398437, 0x807fffff, 0x81398437, 0x3c00080}, | ||
| 1710 | {0x3c00000, 0x81398437, 0x80800000, 0x81798437, 0x3c00000}, | ||
| 1711 | {0x3c00000, 0x81398437, 0x80800002, 0x81798438, 0x3c00000}, | ||
| 1712 | {0x3c00000, 0x81398437, 0x81398437, 0x81b98437, 0x3c00000}, | ||
| 1713 | {0x3c00000, 0x81398437, 0x8ba98d27, 0x8ba98d2c, 0x3c00010}, | ||
| 1714 | {0x3c00000, 0x81398437, 0x8ba98d7a, 0x8ba98d7f, 0x3c00010}, | ||
| 1715 | {0x3c00000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 1716 | {0x3c00000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 1717 | {0x3c00000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 1718 | {0x3c00000, 0x81398437, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 1719 | {0x3c00000, 0x81398437, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1720 | {0x3c00000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1721 | {0x3c00000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1722 | {0x3c00000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1723 | {0x3c00000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1724 | {0x3c00000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1725 | {0x3c00000, 0x81398437, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 1726 | {0x3c00000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 1727 | {0x3c00000, 0x81398437, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 1728 | {0x3c00000, 0x81398437, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 1729 | {0x3c00000, 0x81398437, 0x9503366, 0x95032ac, 0x3c00010}, | ||
| 1730 | {0x3c00000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, | ||
| 1731 | {0x3c00000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 1732 | {0x3c00000, 0x81398437, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 1733 | {0x3c00000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, | ||
| 1734 | {0x3c00000, 0x81398437, 0x966320b, 0x9663151, 0x3c00010}, | ||
| 1735 | {0x3c00000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3c00010}, | ||
| 1736 | {0x3c00000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, | ||
| 1737 | {0x3c00000, 0x81398437, 0x317285d3, 0x317285d2, 0x3c00010}, | ||
| 1738 | {0x3c00000, 0x81398437, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, | ||
| 1739 | {0x3c00000, 0x81398437, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 1740 | {0x3c00000, 0x81398437, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 1741 | {0x3c00000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3c00000}, | ||
| 1742 | {0x3c00000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3c00080}, | ||
| 1743 | {0x3c00000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3c00080}, | ||
| 1744 | {0x3c00000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3c00080}, | ||
| 1745 | {0x3c00000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3c00080}, | ||
| 1746 | {0x3c00000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3c00080}, | ||
| 1747 | {0x3c00000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3c00000}, | ||
| 1748 | {0x3c00000, 0x8ba98d27, 0x800002, 0x8ba98d24, 0x3c00010}, | ||
| 1749 | {0x3c00000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3c00010}, | ||
| 1750 | {0x3c00000, 0x8ba98d27, 0xba98d27, 0x0, 0x3c00000}, | ||
| 1751 | {0x3c00000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3c00000}, | ||
| 1752 | {0x3c00000, 0x8ba98d27, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 1753 | {0x3c00000, 0x8ba98d27, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 1754 | {0x3c00000, 0x8ba98d27, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 1755 | {0x3c00000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1756 | {0x3c00000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1757 | {0x3c00000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1758 | {0x3c00000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1759 | {0x3c00000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1760 | {0x3c00000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1761 | {0x3c00000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1762 | {0x3c00000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3c00000}, | ||
| 1763 | {0x3c00000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3c00080}, | ||
| 1764 | {0x3c00000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3c00080}, | ||
| 1765 | {0x3c00000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3c00080}, | ||
| 1766 | {0x3c00000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3c00080}, | ||
| 1767 | {0x3c00000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3c00080}, | ||
| 1768 | {0x3c00000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3c00000}, | ||
| 1769 | {0x3c00000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3c00010}, | ||
| 1770 | {0x3c00000, 0x8ba98d27, 0x81398437, 0x8ba98d2c, 0x3c00010}, | ||
| 1771 | {0x3c00000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3c00000}, | ||
| 1772 | {0x3c00000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3c00010}, | ||
| 1773 | {0x3c00000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 1774 | {0x3c00000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 1775 | {0x3c00000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 1776 | {0x3c00000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 1777 | {0x3c00000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1778 | {0x3c00000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1779 | {0x3c00000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1780 | {0x3c00000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1781 | {0x3c00000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1782 | {0x3c00000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1783 | {0x3c00000, 0x8ba98d27, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 1784 | {0x3c00000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 1785 | {0x3c00000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 1786 | {0x3c00000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 1787 | {0x3c00000, 0x8ba98d27, 0x9503366, 0x8ba30b8b, 0x3c00010}, | ||
| 1788 | {0x3c00000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, | ||
| 1789 | {0x3c00000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 1790 | {0x3c00000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 1791 | {0x3c00000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, | ||
| 1792 | {0x3c00000, 0x8ba98d27, 0x966320b, 0x8ba25b96, 0x3c00010}, | ||
| 1793 | {0x3c00000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3c00010}, | ||
| 1794 | {0x3c00000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, | ||
| 1795 | {0x3c00000, 0x8ba98d27, 0x317285d3, 0x317285d2, 0x3c00010}, | ||
| 1796 | {0x3c00000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, | ||
| 1797 | {0x3c00000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 1798 | {0x3c00000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 1799 | {0x3c00000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3c00000}, | ||
| 1800 | {0x3c00000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3c00080}, | ||
| 1801 | {0x3c00000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3c00080}, | ||
| 1802 | {0x3c00000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3c00080}, | ||
| 1803 | {0x3c00000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3c00080}, | ||
| 1804 | {0x3c00000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3c00080}, | ||
| 1805 | {0x3c00000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3c00000}, | ||
| 1806 | {0x3c00000, 0x8ba98d7a, 0x800002, 0x8ba98d77, 0x3c00010}, | ||
| 1807 | {0x3c00000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3c00010}, | ||
| 1808 | {0x3c00000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3c00000}, | ||
| 1809 | {0x3c00000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3c00000}, | ||
| 1810 | {0x3c00000, 0x8ba98d7a, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 1811 | {0x3c00000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 1812 | {0x3c00000, 0x8ba98d7a, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 1813 | {0x3c00000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1814 | {0x3c00000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1815 | {0x3c00000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1816 | {0x3c00000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1817 | {0x3c00000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1818 | {0x3c00000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1819 | {0x3c00000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1820 | {0x3c00000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3c00000}, | ||
| 1821 | {0x3c00000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3c00080}, | ||
| 1822 | {0x3c00000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3c00080}, | ||
| 1823 | {0x3c00000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3c00080}, | ||
| 1824 | {0x3c00000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3c00080}, | ||
| 1825 | {0x3c00000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3c00080}, | ||
| 1826 | {0x3c00000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3c00000}, | ||
| 1827 | {0x3c00000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3c00010}, | ||
| 1828 | {0x3c00000, 0x8ba98d7a, 0x81398437, 0x8ba98d7f, 0x3c00010}, | ||
| 1829 | {0x3c00000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3c00010}, | ||
| 1830 | {0x3c00000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3c00000}, | ||
| 1831 | {0x3c00000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 1832 | {0x3c00000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 1833 | {0x3c00000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 1834 | {0x3c00000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 1835 | {0x3c00000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1836 | {0x3c00000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1837 | {0x3c00000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1838 | {0x3c00000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1839 | {0x3c00000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1840 | {0x3c00000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1841 | {0x3c00000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 1842 | {0x3c00000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 1843 | {0x3c00000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 1844 | {0x3c00000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 1845 | {0x3c00000, 0x8ba98d7a, 0x9503366, 0x8ba30bde, 0x3c00010}, | ||
| 1846 | {0x3c00000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, | ||
| 1847 | {0x3c00000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 1848 | {0x3c00000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 1849 | {0x3c00000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, | ||
| 1850 | {0x3c00000, 0x8ba98d7a, 0x966320b, 0x8ba25be9, 0x3c00010}, | ||
| 1851 | {0x3c00000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3c00010}, | ||
| 1852 | {0x3c00000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, | ||
| 1853 | {0x3c00000, 0x8ba98d7a, 0x317285d3, 0x317285d2, 0x3c00010}, | ||
| 1854 | {0x3c00000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, | ||
| 1855 | {0x3c00000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 1856 | {0x3c00000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 1857 | {0x3c00000, 0xf51f853a, 0x0, 0xf51f853a, 0x3c00000}, | ||
| 1858 | {0x3c00000, 0xf51f853a, 0x1, 0xf51f853a, 0x3c00080}, | ||
| 1859 | {0x3c00000, 0xf51f853a, 0x76, 0xf51f853a, 0x3c00080}, | ||
| 1860 | {0x3c00000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3c00080}, | ||
| 1861 | {0x3c00000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3c00080}, | ||
| 1862 | {0x3c00000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3c00080}, | ||
| 1863 | {0x3c00000, 0xf51f853a, 0x800000, 0xf51f8539, 0x3c00010}, | ||
| 1864 | {0x3c00000, 0xf51f853a, 0x800002, 0xf51f8539, 0x3c00010}, | ||
| 1865 | {0x3c00000, 0xf51f853a, 0x1398437, 0xf51f8539, 0x3c00010}, | ||
| 1866 | {0x3c00000, 0xf51f853a, 0xba98d27, 0xf51f8539, 0x3c00010}, | ||
| 1867 | {0x3c00000, 0xf51f853a, 0xba98d7a, 0xf51f8539, 0x3c00010}, | ||
| 1868 | {0x3c00000, 0xf51f853a, 0x751f853a, 0x0, 0x3c00000}, | ||
| 1869 | {0x3c00000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3c00010}, | ||
| 1870 | {0x3c00000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3c00010}, | ||
| 1871 | {0x3c00000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1872 | {0x3c00000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1873 | {0x3c00000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1874 | {0x3c00000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1875 | {0x3c00000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1876 | {0x3c00000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1877 | {0x3c00000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1878 | {0x3c00000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3c00000}, | ||
| 1879 | {0x3c00000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3c00080}, | ||
| 1880 | {0x3c00000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3c00080}, | ||
| 1881 | {0x3c00000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3c00080}, | ||
| 1882 | {0x3c00000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3c00080}, | ||
| 1883 | {0x3c00000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3c00080}, | ||
| 1884 | {0x3c00000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3c00010}, | ||
| 1885 | {0x3c00000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3c00010}, | ||
| 1886 | {0x3c00000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3c00010}, | ||
| 1887 | {0x3c00000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3c00010}, | ||
| 1888 | {0x3c00000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3c00010}, | ||
| 1889 | {0x3c00000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3c00000}, | ||
| 1890 | {0x3c00000, 0xf51f853a, 0xff7ffff0, 0xff7ffff9, 0x3c00010}, | ||
| 1891 | {0x3c00000, 0xf51f853a, 0xff7fffff, 0xff7fffff, 0x3c00014}, | ||
| 1892 | {0x3c00000, 0xf51f853a, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 1893 | {0x3c00000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1894 | {0x3c00000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1895 | {0x3c00000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1896 | {0x3c00000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1897 | {0x3c00000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1898 | {0x3c00000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1899 | {0x3c00000, 0xf51f853a, 0x4f3495cb, 0xf51f8539, 0x3c00010}, | ||
| 1900 | {0x3c00000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3c00010}, | ||
| 1901 | {0x3c00000, 0xf51f853a, 0x7c994e9e, 0x7c994d5e, 0x3c00010}, | ||
| 1902 | {0x3c00000, 0xf51f853a, 0x6164bd6c, 0xf51f8539, 0x3c00010}, | ||
| 1903 | {0x3c00000, 0xf51f853a, 0x9503366, 0xf51f8539, 0x3c00010}, | ||
| 1904 | {0x3c00000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3c00010}, | ||
| 1905 | {0x3c00000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3c00010}, | ||
| 1906 | {0x3c00000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3c00010}, | ||
| 1907 | {0x3c00000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3c00010}, | ||
| 1908 | {0x3c00000, 0xf51f853a, 0x966320b, 0xf51f8539, 0x3c00010}, | ||
| 1909 | {0x3c00000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3c00010}, | ||
| 1910 | {0x3c00000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3c00010}, | ||
| 1911 | {0x3c00000, 0xf51f853a, 0x317285d3, 0xf51f8539, 0x3c00010}, | ||
| 1912 | {0x3c00000, 0xf51f853a, 0x3c9623b1, 0xf51f8539, 0x3c00010}, | ||
| 1913 | {0x3c00000, 0xf51f853a, 0x51fd2c7c, 0xf51f8539, 0x3c00010}, | ||
| 1914 | {0x3c00000, 0xf51f853a, 0x7b906a6c, 0x7b90656f, 0x3c00010}, | ||
| 1915 | {0x3c00000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3c00000}, | ||
| 1916 | {0x3c00000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3c00080}, | ||
| 1917 | {0x3c00000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3c00080}, | ||
| 1918 | {0x3c00000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3c00080}, | ||
| 1919 | {0x3c00000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3c00080}, | ||
| 1920 | {0x3c00000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3c00080}, | ||
| 1921 | {0x3c00000, 0xff7ffff0, 0x800000, 0xff7fffef, 0x3c00010}, | ||
| 1922 | {0x3c00000, 0xff7ffff0, 0x800002, 0xff7fffef, 0x3c00010}, | ||
| 1923 | {0x3c00000, 0xff7ffff0, 0x1398437, 0xff7fffef, 0x3c00010}, | ||
| 1924 | {0x3c00000, 0xff7ffff0, 0xba98d27, 0xff7fffef, 0x3c00010}, | ||
| 1925 | {0x3c00000, 0xff7ffff0, 0xba98d7a, 0xff7fffef, 0x3c00010}, | ||
| 1926 | {0x3c00000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3c00010}, | ||
| 1927 | {0x3c00000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3c00000}, | ||
| 1928 | {0x3c00000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3c00000}, | ||
| 1929 | {0x3c00000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1930 | {0x3c00000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1931 | {0x3c00000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1932 | {0x3c00000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1933 | {0x3c00000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1934 | {0x3c00000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1935 | {0x3c00000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1936 | {0x3c00000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3c00000}, | ||
| 1937 | {0x3c00000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3c00080}, | ||
| 1938 | {0x3c00000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3c00080}, | ||
| 1939 | {0x3c00000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3c00080}, | ||
| 1940 | {0x3c00000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3c00080}, | ||
| 1941 | {0x3c00000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3c00080}, | ||
| 1942 | {0x3c00000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3c00010}, | ||
| 1943 | {0x3c00000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3c00010}, | ||
| 1944 | {0x3c00000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3c00010}, | ||
| 1945 | {0x3c00000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3c00010}, | ||
| 1946 | {0x3c00000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3c00010}, | ||
| 1947 | {0x3c00000, 0xff7ffff0, 0xf51f853a, 0xff7ffff9, 0x3c00010}, | ||
| 1948 | {0x3c00000, 0xff7ffff0, 0xff7ffff0, 0xff7fffff, 0x3c00014}, | ||
| 1949 | {0x3c00000, 0xff7ffff0, 0xff7fffff, 0xff7fffff, 0x3c00014}, | ||
| 1950 | {0x3c00000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 1951 | {0x3c00000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 1952 | {0x3c00000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 1953 | {0x3c00000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1954 | {0x3c00000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 1955 | {0x3c00000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1956 | {0x3c00000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 1957 | {0x3c00000, 0xff7ffff0, 0x4f3495cb, 0xff7fffef, 0x3c00010}, | ||
| 1958 | {0x3c00000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3c00010}, | ||
| 1959 | {0x3c00000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3c00010}, | ||
| 1960 | {0x3c00000, 0xff7ffff0, 0x6164bd6c, 0xff7fffef, 0x3c00010}, | ||
| 1961 | {0x3c00000, 0xff7ffff0, 0x9503366, 0xff7fffef, 0x3c00010}, | ||
| 1962 | {0x3c00000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3c00010}, | ||
| 1963 | {0x3c00000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3c00010}, | ||
| 1964 | {0x3c00000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe09, 0x3c00010}, | ||
| 1965 | {0x3c00000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3c00010}, | ||
| 1966 | {0x3c00000, 0xff7ffff0, 0x966320b, 0xff7fffef, 0x3c00010}, | ||
| 1967 | {0x3c00000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3c00010}, | ||
| 1968 | {0x3c00000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3c00010}, | ||
| 1969 | {0x3c00000, 0xff7ffff0, 0x317285d3, 0xff7fffef, 0x3c00010}, | ||
| 1970 | {0x3c00000, 0xff7ffff0, 0x3c9623b1, 0xff7fffef, 0x3c00010}, | ||
| 1971 | {0x3c00000, 0xff7ffff0, 0x51fd2c7c, 0xff7fffef, 0x3c00010}, | ||
| 1972 | {0x3c00000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3c00010}, | ||
| 1973 | {0x3c00000, 0xff7fffff, 0x0, 0xff7fffff, 0x3c00000}, | ||
| 1974 | {0x3c00000, 0xff7fffff, 0x1, 0xff7fffff, 0x3c00080}, | ||
| 1975 | {0x3c00000, 0xff7fffff, 0x76, 0xff7fffff, 0x3c00080}, | ||
| 1976 | {0x3c00000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3c00080}, | ||
| 1977 | {0x3c00000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3c00080}, | ||
| 1978 | {0x3c00000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3c00080}, | ||
| 1979 | {0x3c00000, 0xff7fffff, 0x800000, 0xff7ffffe, 0x3c00010}, | ||
| 1980 | {0x3c00000, 0xff7fffff, 0x800002, 0xff7ffffe, 0x3c00010}, | ||
| 1981 | {0x3c00000, 0xff7fffff, 0x1398437, 0xff7ffffe, 0x3c00010}, | ||
| 1982 | {0x3c00000, 0xff7fffff, 0xba98d27, 0xff7ffffe, 0x3c00010}, | ||
| 1983 | {0x3c00000, 0xff7fffff, 0xba98d7a, 0xff7ffffe, 0x3c00010}, | ||
| 1984 | {0x3c00000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3c00010}, | ||
| 1985 | {0x3c00000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3c00000}, | ||
| 1986 | {0x3c00000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3c00000}, | ||
| 1987 | {0x3c00000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 1988 | {0x3c00000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 1989 | {0x3c00000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 1990 | {0x3c00000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 1991 | {0x3c00000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 1992 | {0x3c00000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 1993 | {0x3c00000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 1994 | {0x3c00000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3c00000}, | ||
| 1995 | {0x3c00000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3c00080}, | ||
| 1996 | {0x3c00000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3c00080}, | ||
| 1997 | {0x3c00000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3c00080}, | ||
| 1998 | {0x3c00000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3c00080}, | ||
| 1999 | {0x3c00000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3c00080}, | ||
| 2000 | {0x3c00000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3c00010}, | ||
| 2001 | {0x3c00000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3c00010}, | ||
| 2002 | {0x3c00000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3c00010}, | ||
| 2003 | {0x3c00000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3c00010}, | ||
| 2004 | {0x3c00000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3c00010}, | ||
| 2005 | {0x3c00000, 0xff7fffff, 0xf51f853a, 0xff7fffff, 0x3c00014}, | ||
| 2006 | {0x3c00000, 0xff7fffff, 0xff7ffff0, 0xff7fffff, 0x3c00014}, | ||
| 2007 | {0x3c00000, 0xff7fffff, 0xff7fffff, 0xff7fffff, 0x3c00014}, | ||
| 2008 | {0x3c00000, 0xff7fffff, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2009 | {0x3c00000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2010 | {0x3c00000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2011 | {0x3c00000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2012 | {0x3c00000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2013 | {0x3c00000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2014 | {0x3c00000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2015 | {0x3c00000, 0xff7fffff, 0x4f3495cb, 0xff7ffffe, 0x3c00010}, | ||
| 2016 | {0x3c00000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3c00010}, | ||
| 2017 | {0x3c00000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3c00010}, | ||
| 2018 | {0x3c00000, 0xff7fffff, 0x6164bd6c, 0xff7ffffe, 0x3c00010}, | ||
| 2019 | {0x3c00000, 0xff7fffff, 0x9503366, 0xff7ffffe, 0x3c00010}, | ||
| 2020 | {0x3c00000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3c00010}, | ||
| 2021 | {0x3c00000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3c00010}, | ||
| 2022 | {0x3c00000, 0xff7fffff, 0x77f31e2f, 0xff7ffe18, 0x3c00010}, | ||
| 2023 | {0x3c00000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3c00010}, | ||
| 2024 | {0x3c00000, 0xff7fffff, 0x966320b, 0xff7ffffe, 0x3c00010}, | ||
| 2025 | {0x3c00000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3c00010}, | ||
| 2026 | {0x3c00000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3c00010}, | ||
| 2027 | {0x3c00000, 0xff7fffff, 0x317285d3, 0xff7ffffe, 0x3c00010}, | ||
| 2028 | {0x3c00000, 0xff7fffff, 0x3c9623b1, 0xff7ffffe, 0x3c00010}, | ||
| 2029 | {0x3c00000, 0xff7fffff, 0x51fd2c7c, 0xff7ffffe, 0x3c00010}, | ||
| 2030 | {0x3c00000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3c00010}, | ||
| 2031 | {0x3c00000, 0xff800000, 0x0, 0xff800000, 0x3c00000}, | ||
| 2032 | {0x3c00000, 0xff800000, 0x1, 0xff800000, 0x3c00080}, | ||
| 2033 | {0x3c00000, 0xff800000, 0x76, 0xff800000, 0x3c00080}, | ||
| 2034 | {0x3c00000, 0xff800000, 0x2b94, 0xff800000, 0x3c00080}, | ||
| 2035 | {0x3c00000, 0xff800000, 0x636d24, 0xff800000, 0x3c00080}, | ||
| 2036 | {0x3c00000, 0xff800000, 0x7fffff, 0xff800000, 0x3c00080}, | ||
| 2037 | {0x3c00000, 0xff800000, 0x800000, 0xff800000, 0x3c00000}, | ||
| 2038 | {0x3c00000, 0xff800000, 0x800002, 0xff800000, 0x3c00000}, | ||
| 2039 | {0x3c00000, 0xff800000, 0x1398437, 0xff800000, 0x3c00000}, | ||
| 2040 | {0x3c00000, 0xff800000, 0xba98d27, 0xff800000, 0x3c00000}, | ||
| 2041 | {0x3c00000, 0xff800000, 0xba98d7a, 0xff800000, 0x3c00000}, | ||
| 2042 | {0x3c00000, 0xff800000, 0x751f853a, 0xff800000, 0x3c00000}, | ||
| 2043 | {0x3c00000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3c00000}, | ||
| 2044 | {0x3c00000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3c00000}, | ||
| 2045 | {0x3c00000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3c00001}, | ||
| 2046 | {0x3c00000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2047 | {0x3c00000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2048 | {0x3c00000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2049 | {0x3c00000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2050 | {0x3c00000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2051 | {0x3c00000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2052 | {0x3c00000, 0xff800000, 0x80000000, 0xff800000, 0x3c00000}, | ||
| 2053 | {0x3c00000, 0xff800000, 0x80000001, 0xff800000, 0x3c00080}, | ||
| 2054 | {0x3c00000, 0xff800000, 0x80000076, 0xff800000, 0x3c00080}, | ||
| 2055 | {0x3c00000, 0xff800000, 0x80002b94, 0xff800000, 0x3c00080}, | ||
| 2056 | {0x3c00000, 0xff800000, 0x80636d24, 0xff800000, 0x3c00080}, | ||
| 2057 | {0x3c00000, 0xff800000, 0x807fffff, 0xff800000, 0x3c00080}, | ||
| 2058 | {0x3c00000, 0xff800000, 0x80800000, 0xff800000, 0x3c00000}, | ||
| 2059 | {0x3c00000, 0xff800000, 0x80800002, 0xff800000, 0x3c00000}, | ||
| 2060 | {0x3c00000, 0xff800000, 0x81398437, 0xff800000, 0x3c00000}, | ||
| 2061 | {0x3c00000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3c00000}, | ||
| 2062 | {0x3c00000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3c00000}, | ||
| 2063 | {0x3c00000, 0xff800000, 0xf51f853a, 0xff800000, 0x3c00000}, | ||
| 2064 | {0x3c00000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3c00000}, | ||
| 2065 | {0x3c00000, 0xff800000, 0xff7fffff, 0xff800000, 0x3c00000}, | ||
| 2066 | {0x3c00000, 0xff800000, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2067 | {0x3c00000, 0xff800000, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2068 | {0x3c00000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2069 | {0x3c00000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2070 | {0x3c00000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2071 | {0x3c00000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2072 | {0x3c00000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2073 | {0x3c00000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3c00000}, | ||
| 2074 | {0x3c00000, 0xff800000, 0xe73a5134, 0xff800000, 0x3c00000}, | ||
| 2075 | {0x3c00000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3c00000}, | ||
| 2076 | {0x3c00000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3c00000}, | ||
| 2077 | {0x3c00000, 0xff800000, 0x9503366, 0xff800000, 0x3c00000}, | ||
| 2078 | {0x3c00000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3c00000}, | ||
| 2079 | {0x3c00000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3c00000}, | ||
| 2080 | {0x3c00000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3c00000}, | ||
| 2081 | {0x3c00000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3c00000}, | ||
| 2082 | {0x3c00000, 0xff800000, 0x966320b, 0xff800000, 0x3c00000}, | ||
| 2083 | {0x3c00000, 0xff800000, 0xb26bddee, 0xff800000, 0x3c00000}, | ||
| 2084 | {0x3c00000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3c00000}, | ||
| 2085 | {0x3c00000, 0xff800000, 0x317285d3, 0xff800000, 0x3c00000}, | ||
| 2086 | {0x3c00000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3c00000}, | ||
| 2087 | {0x3c00000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3c00000}, | ||
| 2088 | {0x3c00000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3c00000}, | ||
| 2089 | {0x3c00000, 0xff800001, 0x0, 0x7fc00000, 0x3c00001}, | ||
| 2090 | {0x3c00000, 0xff800001, 0x1, 0x7fc00000, 0x3c00081}, | ||
| 2091 | {0x3c00000, 0xff800001, 0x76, 0x7fc00000, 0x3c00081}, | ||
| 2092 | {0x3c00000, 0xff800001, 0x2b94, 0x7fc00000, 0x3c00081}, | ||
| 2093 | {0x3c00000, 0xff800001, 0x636d24, 0x7fc00000, 0x3c00081}, | ||
| 2094 | {0x3c00000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3c00081}, | ||
| 2095 | {0x3c00000, 0xff800001, 0x800000, 0x7fc00000, 0x3c00001}, | ||
| 2096 | {0x3c00000, 0xff800001, 0x800002, 0x7fc00000, 0x3c00001}, | ||
| 2097 | {0x3c00000, 0xff800001, 0x1398437, 0x7fc00000, 0x3c00001}, | ||
| 2098 | {0x3c00000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3c00001}, | ||
| 2099 | {0x3c00000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 2100 | {0x3c00000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3c00001}, | ||
| 2101 | {0x3c00000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 2102 | {0x3c00000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3c00001}, | ||
| 2103 | {0x3c00000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3c00001}, | ||
| 2104 | {0x3c00000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2105 | {0x3c00000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2106 | {0x3c00000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2107 | {0x3c00000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3c00001}, | ||
| 2108 | {0x3c00000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 2109 | {0x3c00000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3c00001}, | ||
| 2110 | {0x3c00000, 0xff800001, 0x80000000, 0x7fc00000, 0x3c00001}, | ||
| 2111 | {0x3c00000, 0xff800001, 0x80000001, 0x7fc00000, 0x3c00081}, | ||
| 2112 | {0x3c00000, 0xff800001, 0x80000076, 0x7fc00000, 0x3c00081}, | ||
| 2113 | {0x3c00000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3c00081}, | ||
| 2114 | {0x3c00000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3c00081}, | ||
| 2115 | {0x3c00000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3c00081}, | ||
| 2116 | {0x3c00000, 0xff800001, 0x80800000, 0x7fc00000, 0x3c00001}, | ||
| 2117 | {0x3c00000, 0xff800001, 0x80800002, 0x7fc00000, 0x3c00001}, | ||
| 2118 | {0x3c00000, 0xff800001, 0x81398437, 0x7fc00000, 0x3c00001}, | ||
| 2119 | {0x3c00000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3c00001}, | ||
| 2120 | {0x3c00000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 2121 | {0x3c00000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3c00001}, | ||
| 2122 | {0x3c00000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 2123 | {0x3c00000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3c00001}, | ||
| 2124 | {0x3c00000, 0xff800001, 0xff800000, 0x7fc00000, 0x3c00001}, | ||
| 2125 | {0x3c00000, 0xff800001, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2126 | {0x3c00000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2127 | {0x3c00000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2128 | {0x3c00000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3c00001}, | ||
| 2129 | {0x3c00000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 2130 | {0x3c00000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3c00001}, | ||
| 2131 | {0x3c00000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3c00001}, | ||
| 2132 | {0x3c00000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3c00001}, | ||
| 2133 | {0x3c00000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3c00001}, | ||
| 2134 | {0x3c00000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3c00001}, | ||
| 2135 | {0x3c00000, 0xff800001, 0x9503366, 0x7fc00000, 0x3c00001}, | ||
| 2136 | {0x3c00000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, | ||
| 2137 | {0x3c00000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, | ||
| 2138 | {0x3c00000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3c00001}, | ||
| 2139 | {0x3c00000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, | ||
| 2140 | {0x3c00000, 0xff800001, 0x966320b, 0x7fc00000, 0x3c00001}, | ||
| 2141 | {0x3c00000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3c00001}, | ||
| 2142 | {0x3c00000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, | ||
| 2143 | {0x3c00000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3c00001}, | ||
| 2144 | {0x3c00000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3c00001}, | ||
| 2145 | {0x3c00000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, | ||
| 2146 | {0x3c00000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3c00001}, | ||
| 2147 | {0x3c00000, 0xff984a37, 0x0, 0x7fc00000, 0x3c00001}, | ||
| 2148 | {0x3c00000, 0xff984a37, 0x1, 0x7fc00000, 0x3c00081}, | ||
| 2149 | {0x3c00000, 0xff984a37, 0x76, 0x7fc00000, 0x3c00081}, | ||
| 2150 | {0x3c00000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3c00081}, | ||
| 2151 | {0x3c00000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3c00081}, | ||
| 2152 | {0x3c00000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3c00081}, | ||
| 2153 | {0x3c00000, 0xff984a37, 0x800000, 0x7fc00000, 0x3c00001}, | ||
| 2154 | {0x3c00000, 0xff984a37, 0x800002, 0x7fc00000, 0x3c00001}, | ||
| 2155 | {0x3c00000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3c00001}, | ||
| 2156 | {0x3c00000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3c00001}, | ||
| 2157 | {0x3c00000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 2158 | {0x3c00000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3c00001}, | ||
| 2159 | {0x3c00000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 2160 | {0x3c00000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3c00001}, | ||
| 2161 | {0x3c00000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3c00001}, | ||
| 2162 | {0x3c00000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2163 | {0x3c00000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2164 | {0x3c00000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2165 | {0x3c00000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3c00001}, | ||
| 2166 | {0x3c00000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 2167 | {0x3c00000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3c00001}, | ||
| 2168 | {0x3c00000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3c00001}, | ||
| 2169 | {0x3c00000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3c00081}, | ||
| 2170 | {0x3c00000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3c00081}, | ||
| 2171 | {0x3c00000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3c00081}, | ||
| 2172 | {0x3c00000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3c00081}, | ||
| 2173 | {0x3c00000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3c00081}, | ||
| 2174 | {0x3c00000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3c00001}, | ||
| 2175 | {0x3c00000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3c00001}, | ||
| 2176 | {0x3c00000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3c00001}, | ||
| 2177 | {0x3c00000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3c00001}, | ||
| 2178 | {0x3c00000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 2179 | {0x3c00000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3c00001}, | ||
| 2180 | {0x3c00000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 2181 | {0x3c00000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3c00001}, | ||
| 2182 | {0x3c00000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3c00001}, | ||
| 2183 | {0x3c00000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2184 | {0x3c00000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2185 | {0x3c00000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2186 | {0x3c00000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3c00001}, | ||
| 2187 | {0x3c00000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 2188 | {0x3c00000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3c00001}, | ||
| 2189 | {0x3c00000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3c00001}, | ||
| 2190 | {0x3c00000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3c00001}, | ||
| 2191 | {0x3c00000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3c00001}, | ||
| 2192 | {0x3c00000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3c00001}, | ||
| 2193 | {0x3c00000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3c00001}, | ||
| 2194 | {0x3c00000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, | ||
| 2195 | {0x3c00000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, | ||
| 2196 | {0x3c00000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3c00001}, | ||
| 2197 | {0x3c00000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, | ||
| 2198 | {0x3c00000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3c00001}, | ||
| 2199 | {0x3c00000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3c00001}, | ||
| 2200 | {0x3c00000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, | ||
| 2201 | {0x3c00000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3c00001}, | ||
| 2202 | {0x3c00000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3c00001}, | ||
| 2203 | {0x3c00000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, | ||
| 2204 | {0x3c00000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3c00001}, | ||
| 2205 | {0x3c00000, 0xffbfffff, 0x0, 0x7fc00000, 0x3c00001}, | ||
| 2206 | {0x3c00000, 0xffbfffff, 0x1, 0x7fc00000, 0x3c00081}, | ||
| 2207 | {0x3c00000, 0xffbfffff, 0x76, 0x7fc00000, 0x3c00081}, | ||
| 2208 | {0x3c00000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3c00081}, | ||
| 2209 | {0x3c00000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3c00081}, | ||
| 2210 | {0x3c00000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3c00081}, | ||
| 2211 | {0x3c00000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3c00001}, | ||
| 2212 | {0x3c00000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3c00001}, | ||
| 2213 | {0x3c00000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3c00001}, | ||
| 2214 | {0x3c00000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3c00001}, | ||
| 2215 | {0x3c00000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 2216 | {0x3c00000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3c00001}, | ||
| 2217 | {0x3c00000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 2218 | {0x3c00000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3c00001}, | ||
| 2219 | {0x3c00000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3c00001}, | ||
| 2220 | {0x3c00000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2221 | {0x3c00000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2222 | {0x3c00000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2223 | {0x3c00000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3c00001}, | ||
| 2224 | {0x3c00000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 2225 | {0x3c00000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3c00001}, | ||
| 2226 | {0x3c00000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3c00001}, | ||
| 2227 | {0x3c00000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3c00081}, | ||
| 2228 | {0x3c00000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3c00081}, | ||
| 2229 | {0x3c00000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3c00081}, | ||
| 2230 | {0x3c00000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3c00081}, | ||
| 2231 | {0x3c00000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3c00081}, | ||
| 2232 | {0x3c00000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3c00001}, | ||
| 2233 | {0x3c00000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3c00001}, | ||
| 2234 | {0x3c00000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3c00001}, | ||
| 2235 | {0x3c00000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3c00001}, | ||
| 2236 | {0x3c00000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, | ||
| 2237 | {0x3c00000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3c00001}, | ||
| 2238 | {0x3c00000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3c00001}, | ||
| 2239 | {0x3c00000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3c00001}, | ||
| 2240 | {0x3c00000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3c00001}, | ||
| 2241 | {0x3c00000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2242 | {0x3c00000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2243 | {0x3c00000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2244 | {0x3c00000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3c00001}, | ||
| 2245 | {0x3c00000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3c00001}, | ||
| 2246 | {0x3c00000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3c00001}, | ||
| 2247 | {0x3c00000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3c00001}, | ||
| 2248 | {0x3c00000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3c00001}, | ||
| 2249 | {0x3c00000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3c00001}, | ||
| 2250 | {0x3c00000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3c00001}, | ||
| 2251 | {0x3c00000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3c00001}, | ||
| 2252 | {0x3c00000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, | ||
| 2253 | {0x3c00000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, | ||
| 2254 | {0x3c00000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3c00001}, | ||
| 2255 | {0x3c00000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, | ||
| 2256 | {0x3c00000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3c00001}, | ||
| 2257 | {0x3c00000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3c00001}, | ||
| 2258 | {0x3c00000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, | ||
| 2259 | {0x3c00000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3c00001}, | ||
| 2260 | {0x3c00000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3c00001}, | ||
| 2261 | {0x3c00000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, | ||
| 2262 | {0x3c00000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3c00001}, | ||
| 2263 | {0x3c00000, 0xffc00000, 0x0, 0x7fc00000, 0x3c00000}, | ||
| 2264 | {0x3c00000, 0xffc00000, 0x1, 0x7fc00000, 0x3c00080}, | ||
| 2265 | {0x3c00000, 0xffc00000, 0x76, 0x7fc00000, 0x3c00080}, | ||
| 2266 | {0x3c00000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3c00080}, | ||
| 2267 | {0x3c00000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3c00080}, | ||
| 2268 | {0x3c00000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3c00080}, | ||
| 2269 | {0x3c00000, 0xffc00000, 0x800000, 0x7fc00000, 0x3c00000}, | ||
| 2270 | {0x3c00000, 0xffc00000, 0x800002, 0x7fc00000, 0x3c00000}, | ||
| 2271 | {0x3c00000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3c00000}, | ||
| 2272 | {0x3c00000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3c00000}, | ||
| 2273 | {0x3c00000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 2274 | {0x3c00000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3c00000}, | ||
| 2275 | {0x3c00000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 2276 | {0x3c00000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3c00000}, | ||
| 2277 | {0x3c00000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3c00000}, | ||
| 2278 | {0x3c00000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2279 | {0x3c00000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2280 | {0x3c00000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2281 | {0x3c00000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2282 | {0x3c00000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2283 | {0x3c00000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2284 | {0x3c00000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3c00000}, | ||
| 2285 | {0x3c00000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3c00080}, | ||
| 2286 | {0x3c00000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3c00080}, | ||
| 2287 | {0x3c00000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3c00080}, | ||
| 2288 | {0x3c00000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3c00080}, | ||
| 2289 | {0x3c00000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3c00080}, | ||
| 2290 | {0x3c00000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3c00000}, | ||
| 2291 | {0x3c00000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3c00000}, | ||
| 2292 | {0x3c00000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3c00000}, | ||
| 2293 | {0x3c00000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3c00000}, | ||
| 2294 | {0x3c00000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 2295 | {0x3c00000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3c00000}, | ||
| 2296 | {0x3c00000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 2297 | {0x3c00000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3c00000}, | ||
| 2298 | {0x3c00000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3c00000}, | ||
| 2299 | {0x3c00000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2300 | {0x3c00000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2301 | {0x3c00000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2302 | {0x3c00000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2303 | {0x3c00000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2304 | {0x3c00000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2305 | {0x3c00000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3c00000}, | ||
| 2306 | {0x3c00000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3c00000}, | ||
| 2307 | {0x3c00000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3c00000}, | ||
| 2308 | {0x3c00000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3c00000}, | ||
| 2309 | {0x3c00000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3c00000}, | ||
| 2310 | {0x3c00000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, | ||
| 2311 | {0x3c00000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, | ||
| 2312 | {0x3c00000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3c00000}, | ||
| 2313 | {0x3c00000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, | ||
| 2314 | {0x3c00000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3c00000}, | ||
| 2315 | {0x3c00000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3c00000}, | ||
| 2316 | {0x3c00000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, | ||
| 2317 | {0x3c00000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3c00000}, | ||
| 2318 | {0x3c00000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3c00000}, | ||
| 2319 | {0x3c00000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, | ||
| 2320 | {0x3c00000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3c00000}, | ||
| 2321 | {0x3c00000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3c00000}, | ||
| 2322 | {0x3c00000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3c00080}, | ||
| 2323 | {0x3c00000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3c00080}, | ||
| 2324 | {0x3c00000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3c00080}, | ||
| 2325 | {0x3c00000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3c00080}, | ||
| 2326 | {0x3c00000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3c00080}, | ||
| 2327 | {0x3c00000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3c00000}, | ||
| 2328 | {0x3c00000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3c00000}, | ||
| 2329 | {0x3c00000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3c00000}, | ||
| 2330 | {0x3c00000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3c00000}, | ||
| 2331 | {0x3c00000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 2332 | {0x3c00000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3c00000}, | ||
| 2333 | {0x3c00000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 2334 | {0x3c00000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3c00000}, | ||
| 2335 | {0x3c00000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3c00000}, | ||
| 2336 | {0x3c00000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2337 | {0x3c00000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2338 | {0x3c00000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2339 | {0x3c00000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2340 | {0x3c00000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2341 | {0x3c00000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2342 | {0x3c00000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3c00000}, | ||
| 2343 | {0x3c00000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3c00080}, | ||
| 2344 | {0x3c00000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3c00080}, | ||
| 2345 | {0x3c00000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3c00080}, | ||
| 2346 | {0x3c00000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3c00080}, | ||
| 2347 | {0x3c00000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3c00080}, | ||
| 2348 | {0x3c00000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3c00000}, | ||
| 2349 | {0x3c00000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3c00000}, | ||
| 2350 | {0x3c00000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3c00000}, | ||
| 2351 | {0x3c00000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3c00000}, | ||
| 2352 | {0x3c00000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 2353 | {0x3c00000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3c00000}, | ||
| 2354 | {0x3c00000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 2355 | {0x3c00000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3c00000}, | ||
| 2356 | {0x3c00000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3c00000}, | ||
| 2357 | {0x3c00000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2358 | {0x3c00000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2359 | {0x3c00000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2360 | {0x3c00000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2361 | {0x3c00000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2362 | {0x3c00000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2363 | {0x3c00000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3c00000}, | ||
| 2364 | {0x3c00000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3c00000}, | ||
| 2365 | {0x3c00000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3c00000}, | ||
| 2366 | {0x3c00000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3c00000}, | ||
| 2367 | {0x3c00000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3c00000}, | ||
| 2368 | {0x3c00000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, | ||
| 2369 | {0x3c00000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, | ||
| 2370 | {0x3c00000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3c00000}, | ||
| 2371 | {0x3c00000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, | ||
| 2372 | {0x3c00000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3c00000}, | ||
| 2373 | {0x3c00000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3c00000}, | ||
| 2374 | {0x3c00000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, | ||
| 2375 | {0x3c00000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3c00000}, | ||
| 2376 | {0x3c00000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3c00000}, | ||
| 2377 | {0x3c00000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, | ||
| 2378 | {0x3c00000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3c00000}, | ||
| 2379 | {0x3c00000, 0xffffffff, 0x0, 0x7fc00000, 0x3c00000}, | ||
| 2380 | {0x3c00000, 0xffffffff, 0x1, 0x7fc00000, 0x3c00080}, | ||
| 2381 | {0x3c00000, 0xffffffff, 0x76, 0x7fc00000, 0x3c00080}, | ||
| 2382 | {0x3c00000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3c00080}, | ||
| 2383 | {0x3c00000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3c00080}, | ||
| 2384 | {0x3c00000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3c00080}, | ||
| 2385 | {0x3c00000, 0xffffffff, 0x800000, 0x7fc00000, 0x3c00000}, | ||
| 2386 | {0x3c00000, 0xffffffff, 0x800002, 0x7fc00000, 0x3c00000}, | ||
| 2387 | {0x3c00000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3c00000}, | ||
| 2388 | {0x3c00000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3c00000}, | ||
| 2389 | {0x3c00000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 2390 | {0x3c00000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3c00000}, | ||
| 2391 | {0x3c00000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 2392 | {0x3c00000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3c00000}, | ||
| 2393 | {0x3c00000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3c00000}, | ||
| 2394 | {0x3c00000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2395 | {0x3c00000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2396 | {0x3c00000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2397 | {0x3c00000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2398 | {0x3c00000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2399 | {0x3c00000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2400 | {0x3c00000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3c00000}, | ||
| 2401 | {0x3c00000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3c00080}, | ||
| 2402 | {0x3c00000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3c00080}, | ||
| 2403 | {0x3c00000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3c00080}, | ||
| 2404 | {0x3c00000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3c00080}, | ||
| 2405 | {0x3c00000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3c00080}, | ||
| 2406 | {0x3c00000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3c00000}, | ||
| 2407 | {0x3c00000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3c00000}, | ||
| 2408 | {0x3c00000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3c00000}, | ||
| 2409 | {0x3c00000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3c00000}, | ||
| 2410 | {0x3c00000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, | ||
| 2411 | {0x3c00000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3c00000}, | ||
| 2412 | {0x3c00000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3c00000}, | ||
| 2413 | {0x3c00000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3c00000}, | ||
| 2414 | {0x3c00000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3c00000}, | ||
| 2415 | {0x3c00000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2416 | {0x3c00000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2417 | {0x3c00000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2418 | {0x3c00000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2419 | {0x3c00000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2420 | {0x3c00000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2421 | {0x3c00000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3c00000}, | ||
| 2422 | {0x3c00000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3c00000}, | ||
| 2423 | {0x3c00000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3c00000}, | ||
| 2424 | {0x3c00000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3c00000}, | ||
| 2425 | {0x3c00000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3c00000}, | ||
| 2426 | {0x3c00000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, | ||
| 2427 | {0x3c00000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, | ||
| 2428 | {0x3c00000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3c00000}, | ||
| 2429 | {0x3c00000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, | ||
| 2430 | {0x3c00000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3c00000}, | ||
| 2431 | {0x3c00000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3c00000}, | ||
| 2432 | {0x3c00000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, | ||
| 2433 | {0x3c00000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3c00000}, | ||
| 2434 | {0x3c00000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3c00000}, | ||
| 2435 | {0x3c00000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, | ||
| 2436 | {0x3c00000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3c00000}, | ||
| 2437 | {0x3c00000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3c00000}, | ||
| 2438 | {0x3c00000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3c00080}, | ||
| 2439 | {0x3c00000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3c00080}, | ||
| 2440 | {0x3c00000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3c00080}, | ||
| 2441 | {0x3c00000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3c00080}, | ||
| 2442 | {0x3c00000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3c00080}, | ||
| 2443 | {0x3c00000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3c00010}, | ||
| 2444 | {0x3c00000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3c00010}, | ||
| 2445 | {0x3c00000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3c00010}, | ||
| 2446 | {0x3c00000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3c00010}, | ||
| 2447 | {0x3c00000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3c00010}, | ||
| 2448 | {0x3c00000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 2449 | {0x3c00000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 2450 | {0x3c00000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 2451 | {0x3c00000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2452 | {0x3c00000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2453 | {0x3c00000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2454 | {0x3c00000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2455 | {0x3c00000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2456 | {0x3c00000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2457 | {0x3c00000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2458 | {0x3c00000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3c00000}, | ||
| 2459 | {0x3c00000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3c00080}, | ||
| 2460 | {0x3c00000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3c00080}, | ||
| 2461 | {0x3c00000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3c00080}, | ||
| 2462 | {0x3c00000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3c00080}, | ||
| 2463 | {0x3c00000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3c00080}, | ||
| 2464 | {0x3c00000, 0x4f3495cb, 0x80800000, 0x4f3495ca, 0x3c00010}, | ||
| 2465 | {0x3c00000, 0x4f3495cb, 0x80800002, 0x4f3495ca, 0x3c00010}, | ||
| 2466 | {0x3c00000, 0x4f3495cb, 0x81398437, 0x4f3495ca, 0x3c00010}, | ||
| 2467 | {0x3c00000, 0x4f3495cb, 0x8ba98d27, 0x4f3495ca, 0x3c00010}, | ||
| 2468 | {0x3c00000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495ca, 0x3c00010}, | ||
| 2469 | {0x3c00000, 0x4f3495cb, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 2470 | {0x3c00000, 0x4f3495cb, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 2471 | {0x3c00000, 0x4f3495cb, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 2472 | {0x3c00000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2473 | {0x3c00000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2474 | {0x3c00000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2475 | {0x3c00000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2476 | {0x3c00000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2477 | {0x3c00000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2478 | {0x3c00000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2479 | {0x3c00000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3c00000}, | ||
| 2480 | {0x3c00000, 0x4f3495cb, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 2481 | {0x3c00000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 2482 | {0x3c00000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 2483 | {0x3c00000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3c00010}, | ||
| 2484 | {0x3c00000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495ca, 0x3c00010}, | ||
| 2485 | {0x3c00000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 2486 | {0x3c00000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 2487 | {0x3c00000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495ca, 0x3c00010}, | ||
| 2488 | {0x3c00000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3c00010}, | ||
| 2489 | {0x3c00000, 0x4f3495cb, 0xb26bddee, 0x4f3495ca, 0x3c00010}, | ||
| 2490 | {0x3c00000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495ca, 0x3c00010}, | ||
| 2491 | {0x3c00000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3c00010}, | ||
| 2492 | {0x3c00000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3c00010}, | ||
| 2493 | {0x3c00000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3c00010}, | ||
| 2494 | {0x3c00000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 2495 | {0x3c00000, 0xe73a5134, 0x0, 0xe73a5134, 0x3c00000}, | ||
| 2496 | {0x3c00000, 0xe73a5134, 0x1, 0xe73a5134, 0x3c00080}, | ||
| 2497 | {0x3c00000, 0xe73a5134, 0x76, 0xe73a5134, 0x3c00080}, | ||
| 2498 | {0x3c00000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3c00080}, | ||
| 2499 | {0x3c00000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3c00080}, | ||
| 2500 | {0x3c00000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3c00080}, | ||
| 2501 | {0x3c00000, 0xe73a5134, 0x800000, 0xe73a5133, 0x3c00010}, | ||
| 2502 | {0x3c00000, 0xe73a5134, 0x800002, 0xe73a5133, 0x3c00010}, | ||
| 2503 | {0x3c00000, 0xe73a5134, 0x1398437, 0xe73a5133, 0x3c00010}, | ||
| 2504 | {0x3c00000, 0xe73a5134, 0xba98d27, 0xe73a5133, 0x3c00010}, | ||
| 2505 | {0x3c00000, 0xe73a5134, 0xba98d7a, 0xe73a5133, 0x3c00010}, | ||
| 2506 | {0x3c00000, 0xe73a5134, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 2507 | {0x3c00000, 0xe73a5134, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 2508 | {0x3c00000, 0xe73a5134, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 2509 | {0x3c00000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2510 | {0x3c00000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2511 | {0x3c00000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2512 | {0x3c00000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2513 | {0x3c00000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2514 | {0x3c00000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2515 | {0x3c00000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2516 | {0x3c00000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3c00000}, | ||
| 2517 | {0x3c00000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3c00080}, | ||
| 2518 | {0x3c00000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3c00080}, | ||
| 2519 | {0x3c00000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3c00080}, | ||
| 2520 | {0x3c00000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3c00080}, | ||
| 2521 | {0x3c00000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3c00080}, | ||
| 2522 | {0x3c00000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3c00010}, | ||
| 2523 | {0x3c00000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3c00010}, | ||
| 2524 | {0x3c00000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3c00010}, | ||
| 2525 | {0x3c00000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3c00010}, | ||
| 2526 | {0x3c00000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3c00010}, | ||
| 2527 | {0x3c00000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 2528 | {0x3c00000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 2529 | {0x3c00000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 2530 | {0x3c00000, 0xe73a5134, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2531 | {0x3c00000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2532 | {0x3c00000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2533 | {0x3c00000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2534 | {0x3c00000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2535 | {0x3c00000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2536 | {0x3c00000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2537 | {0x3c00000, 0xe73a5134, 0x4f3495cb, 0xe73a5133, 0x3c00010}, | ||
| 2538 | {0x3c00000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3c00000}, | ||
| 2539 | {0x3c00000, 0xe73a5134, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 2540 | {0x3c00000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3c00010}, | ||
| 2541 | {0x3c00000, 0xe73a5134, 0x9503366, 0xe73a5133, 0x3c00010}, | ||
| 2542 | {0x3c00000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3c00010}, | ||
| 2543 | {0x3c00000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3c00000}, | ||
| 2544 | {0x3c00000, 0xe73a5134, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 2545 | {0x3c00000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3c00010}, | ||
| 2546 | {0x3c00000, 0xe73a5134, 0x966320b, 0xe73a5133, 0x3c00010}, | ||
| 2547 | {0x3c00000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3c00010}, | ||
| 2548 | {0x3c00000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3c00010}, | ||
| 2549 | {0x3c00000, 0xe73a5134, 0x317285d3, 0xe73a5133, 0x3c00010}, | ||
| 2550 | {0x3c00000, 0xe73a5134, 0x3c9623b1, 0xe73a5133, 0x3c00010}, | ||
| 2551 | {0x3c00000, 0xe73a5134, 0x51fd2c7c, 0xe73a5133, 0x3c00010}, | ||
| 2552 | {0x3c00000, 0xe73a5134, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 2553 | {0x3c00000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3c00000}, | ||
| 2554 | {0x3c00000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3c00080}, | ||
| 2555 | {0x3c00000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3c00080}, | ||
| 2556 | {0x3c00000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3c00080}, | ||
| 2557 | {0x3c00000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3c00080}, | ||
| 2558 | {0x3c00000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3c00080}, | ||
| 2559 | {0x3c00000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3c00010}, | ||
| 2560 | {0x3c00000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3c00010}, | ||
| 2561 | {0x3c00000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3c00010}, | ||
| 2562 | {0x3c00000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3c00010}, | ||
| 2563 | {0x3c00000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3c00010}, | ||
| 2564 | {0x3c00000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3c00010}, | ||
| 2565 | {0x3c00000, 0x7c994e9e, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, | ||
| 2566 | {0x3c00000, 0x7c994e9e, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, | ||
| 2567 | {0x3c00000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2568 | {0x3c00000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2569 | {0x3c00000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2570 | {0x3c00000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2571 | {0x3c00000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2572 | {0x3c00000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2573 | {0x3c00000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2574 | {0x3c00000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3c00000}, | ||
| 2575 | {0x3c00000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3c00080}, | ||
| 2576 | {0x3c00000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3c00080}, | ||
| 2577 | {0x3c00000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3c00080}, | ||
| 2578 | {0x3c00000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3c00080}, | ||
| 2579 | {0x3c00000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3c00080}, | ||
| 2580 | {0x3c00000, 0x7c994e9e, 0x80800000, 0x7c994e9d, 0x3c00010}, | ||
| 2581 | {0x3c00000, 0x7c994e9e, 0x80800002, 0x7c994e9d, 0x3c00010}, | ||
| 2582 | {0x3c00000, 0x7c994e9e, 0x81398437, 0x7c994e9d, 0x3c00010}, | ||
| 2583 | {0x3c00000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9d, 0x3c00010}, | ||
| 2584 | {0x3c00000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9d, 0x3c00010}, | ||
| 2585 | {0x3c00000, 0x7c994e9e, 0xf51f853a, 0x7c994d5e, 0x3c00010}, | ||
| 2586 | {0x3c00000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3c00010}, | ||
| 2587 | {0x3c00000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3c00010}, | ||
| 2588 | {0x3c00000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2589 | {0x3c00000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2590 | {0x3c00000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2591 | {0x3c00000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2592 | {0x3c00000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2593 | {0x3c00000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2594 | {0x3c00000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2595 | {0x3c00000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3c00010}, | ||
| 2596 | {0x3c00000, 0x7c994e9e, 0xe73a5134, 0x7c994e9d, 0x3c00010}, | ||
| 2597 | {0x3c00000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3c00000}, | ||
| 2598 | {0x3c00000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3c00010}, | ||
| 2599 | {0x3c00000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3c00010}, | ||
| 2600 | {0x3c00000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9d, 0x3c00010}, | ||
| 2601 | {0x3c00000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9d, 0x3c00010}, | ||
| 2602 | {0x3c00000, 0x7c994e9e, 0x77f31e2f, 0x7c998b65, 0x3c00010}, | ||
| 2603 | {0x3c00000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9d, 0x3c00010}, | ||
| 2604 | {0x3c00000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3c00010}, | ||
| 2605 | {0x3c00000, 0x7c994e9e, 0xb26bddee, 0x7c994e9d, 0x3c00010}, | ||
| 2606 | {0x3c00000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9d, 0x3c00010}, | ||
| 2607 | {0x3c00000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3c00010}, | ||
| 2608 | {0x3c00000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3c00010}, | ||
| 2609 | {0x3c00000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3c00010}, | ||
| 2610 | {0x3c00000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3c00000}, | ||
| 2611 | {0x3c00000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3c00000}, | ||
| 2612 | {0x3c00000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3c00080}, | ||
| 2613 | {0x3c00000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3c00080}, | ||
| 2614 | {0x3c00000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3c00080}, | ||
| 2615 | {0x3c00000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3c00080}, | ||
| 2616 | {0x3c00000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3c00080}, | ||
| 2617 | {0x3c00000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3c00010}, | ||
| 2618 | {0x3c00000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3c00010}, | ||
| 2619 | {0x3c00000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3c00010}, | ||
| 2620 | {0x3c00000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3c00010}, | ||
| 2621 | {0x3c00000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3c00010}, | ||
| 2622 | {0x3c00000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 2623 | {0x3c00000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 2624 | {0x3c00000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 2625 | {0x3c00000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2626 | {0x3c00000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2627 | {0x3c00000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2628 | {0x3c00000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2629 | {0x3c00000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2630 | {0x3c00000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2631 | {0x3c00000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2632 | {0x3c00000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3c00000}, | ||
| 2633 | {0x3c00000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3c00080}, | ||
| 2634 | {0x3c00000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3c00080}, | ||
| 2635 | {0x3c00000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3c00080}, | ||
| 2636 | {0x3c00000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3c00080}, | ||
| 2637 | {0x3c00000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3c00080}, | ||
| 2638 | {0x3c00000, 0x6164bd6c, 0x80800000, 0x6164bd6b, 0x3c00010}, | ||
| 2639 | {0x3c00000, 0x6164bd6c, 0x80800002, 0x6164bd6b, 0x3c00010}, | ||
| 2640 | {0x3c00000, 0x6164bd6c, 0x81398437, 0x6164bd6b, 0x3c00010}, | ||
| 2641 | {0x3c00000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6b, 0x3c00010}, | ||
| 2642 | {0x3c00000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6b, 0x3c00010}, | ||
| 2643 | {0x3c00000, 0x6164bd6c, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 2644 | {0x3c00000, 0x6164bd6c, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 2645 | {0x3c00000, 0x6164bd6c, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 2646 | {0x3c00000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2647 | {0x3c00000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2648 | {0x3c00000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2649 | {0x3c00000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2650 | {0x3c00000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2651 | {0x3c00000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2652 | {0x3c00000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2653 | {0x3c00000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3c00010}, | ||
| 2654 | {0x3c00000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3c00010}, | ||
| 2655 | {0x3c00000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 2656 | {0x3c00000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3c00000}, | ||
| 2657 | {0x3c00000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3c00010}, | ||
| 2658 | {0x3c00000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6b, 0x3c00010}, | ||
| 2659 | {0x3c00000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3c00010}, | ||
| 2660 | {0x3c00000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 2661 | {0x3c00000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6b, 0x3c00010}, | ||
| 2662 | {0x3c00000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3c00010}, | ||
| 2663 | {0x3c00000, 0x6164bd6c, 0xb26bddee, 0x6164bd6b, 0x3c00010}, | ||
| 2664 | {0x3c00000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6b, 0x3c00010}, | ||
| 2665 | {0x3c00000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3c00010}, | ||
| 2666 | {0x3c00000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3c00010}, | ||
| 2667 | {0x3c00000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3c00010}, | ||
| 2668 | {0x3c00000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 2669 | {0x3c00000, 0x9503366, 0x0, 0x9503366, 0x3c00000}, | ||
| 2670 | {0x3c00000, 0x9503366, 0x1, 0x9503366, 0x3c00080}, | ||
| 2671 | {0x3c00000, 0x9503366, 0x76, 0x9503366, 0x3c00080}, | ||
| 2672 | {0x3c00000, 0x9503366, 0x2b94, 0x9503366, 0x3c00080}, | ||
| 2673 | {0x3c00000, 0x9503366, 0x636d24, 0x9503366, 0x3c00080}, | ||
| 2674 | {0x3c00000, 0x9503366, 0x7fffff, 0x9503366, 0x3c00080}, | ||
| 2675 | {0x3c00000, 0x9503366, 0x800000, 0x95033a6, 0x3c00000}, | ||
| 2676 | {0x3c00000, 0x9503366, 0x800002, 0x95033a6, 0x3c00010}, | ||
| 2677 | {0x3c00000, 0x9503366, 0x1398437, 0x950341f, 0x3c00010}, | ||
| 2678 | {0x3c00000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3c00010}, | ||
| 2679 | {0x3c00000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3c00010}, | ||
| 2680 | {0x3c00000, 0x9503366, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 2681 | {0x3c00000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 2682 | {0x3c00000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 2683 | {0x3c00000, 0x9503366, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2684 | {0x3c00000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2685 | {0x3c00000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2686 | {0x3c00000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2687 | {0x3c00000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2688 | {0x3c00000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2689 | {0x3c00000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2690 | {0x3c00000, 0x9503366, 0x80000000, 0x9503366, 0x3c00000}, | ||
| 2691 | {0x3c00000, 0x9503366, 0x80000001, 0x9503366, 0x3c00080}, | ||
| 2692 | {0x3c00000, 0x9503366, 0x80000076, 0x9503366, 0x3c00080}, | ||
| 2693 | {0x3c00000, 0x9503366, 0x80002b94, 0x9503366, 0x3c00080}, | ||
| 2694 | {0x3c00000, 0x9503366, 0x80636d24, 0x9503366, 0x3c00080}, | ||
| 2695 | {0x3c00000, 0x9503366, 0x807fffff, 0x9503366, 0x3c00080}, | ||
| 2696 | {0x3c00000, 0x9503366, 0x80800000, 0x9503326, 0x3c00000}, | ||
| 2697 | {0x3c00000, 0x9503366, 0x80800002, 0x9503325, 0x3c00010}, | ||
| 2698 | {0x3c00000, 0x9503366, 0x81398437, 0x95032ac, 0x3c00010}, | ||
| 2699 | {0x3c00000, 0x9503366, 0x8ba98d27, 0x8ba30b8b, 0x3c00010}, | ||
| 2700 | {0x3c00000, 0x9503366, 0x8ba98d7a, 0x8ba30bde, 0x3c00010}, | ||
| 2701 | {0x3c00000, 0x9503366, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 2702 | {0x3c00000, 0x9503366, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 2703 | {0x3c00000, 0x9503366, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 2704 | {0x3c00000, 0x9503366, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2705 | {0x3c00000, 0x9503366, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2706 | {0x3c00000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2707 | {0x3c00000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2708 | {0x3c00000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2709 | {0x3c00000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2710 | {0x3c00000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2711 | {0x3c00000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 2712 | {0x3c00000, 0x9503366, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 2713 | {0x3c00000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 2714 | {0x3c00000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 2715 | {0x3c00000, 0x9503366, 0x9503366, 0x9d03366, 0x3c00000}, | ||
| 2716 | {0x3c00000, 0x9503366, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, | ||
| 2717 | {0x3c00000, 0x9503366, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 2718 | {0x3c00000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 2719 | {0x3c00000, 0x9503366, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, | ||
| 2720 | {0x3c00000, 0x9503366, 0x966320b, 0x9db32b8, 0x3c00010}, | ||
| 2721 | {0x3c00000, 0x9503366, 0xb26bddee, 0xb26bdded, 0x3c00010}, | ||
| 2722 | {0x3c00000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, | ||
| 2723 | {0x3c00000, 0x9503366, 0x317285d3, 0x317285d3, 0x3c00010}, | ||
| 2724 | {0x3c00000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, | ||
| 2725 | {0x3c00000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 2726 | {0x3c00000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 2727 | {0x3c00000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3c00000}, | ||
| 2728 | {0x3c00000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3c00080}, | ||
| 2729 | {0x3c00000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3c00080}, | ||
| 2730 | {0x3c00000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3c00080}, | ||
| 2731 | {0x3c00000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3c00080}, | ||
| 2732 | {0x3c00000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3c00080}, | ||
| 2733 | {0x3c00000, 0xbf5a97c9, 0x800000, 0xbf5a97c8, 0x3c00010}, | ||
| 2734 | {0x3c00000, 0xbf5a97c9, 0x800002, 0xbf5a97c8, 0x3c00010}, | ||
| 2735 | {0x3c00000, 0xbf5a97c9, 0x1398437, 0xbf5a97c8, 0x3c00010}, | ||
| 2736 | {0x3c00000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c8, 0x3c00010}, | ||
| 2737 | {0x3c00000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c8, 0x3c00010}, | ||
| 2738 | {0x3c00000, 0xbf5a97c9, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 2739 | {0x3c00000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 2740 | {0x3c00000, 0xbf5a97c9, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 2741 | {0x3c00000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2742 | {0x3c00000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2743 | {0x3c00000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2744 | {0x3c00000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2745 | {0x3c00000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2746 | {0x3c00000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2747 | {0x3c00000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2748 | {0x3c00000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3c00000}, | ||
| 2749 | {0x3c00000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3c00080}, | ||
| 2750 | {0x3c00000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3c00080}, | ||
| 2751 | {0x3c00000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3c00080}, | ||
| 2752 | {0x3c00000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3c00080}, | ||
| 2753 | {0x3c00000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3c00080}, | ||
| 2754 | {0x3c00000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3c00010}, | ||
| 2755 | {0x3c00000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3c00010}, | ||
| 2756 | {0x3c00000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3c00010}, | ||
| 2757 | {0x3c00000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3c00010}, | ||
| 2758 | {0x3c00000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3c00010}, | ||
| 2759 | {0x3c00000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 2760 | {0x3c00000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 2761 | {0x3c00000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 2762 | {0x3c00000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2763 | {0x3c00000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2764 | {0x3c00000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2765 | {0x3c00000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2766 | {0x3c00000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2767 | {0x3c00000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2768 | {0x3c00000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2769 | {0x3c00000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 2770 | {0x3c00000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 2771 | {0x3c00000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 2772 | {0x3c00000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 2773 | {0x3c00000, 0xbf5a97c9, 0x9503366, 0xbf5a97c8, 0x3c00010}, | ||
| 2774 | {0x3c00000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3c00000}, | ||
| 2775 | {0x3c00000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 2776 | {0x3c00000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 2777 | {0x3c00000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3c00010}, | ||
| 2778 | {0x3c00000, 0xbf5a97c9, 0x966320b, 0xbf5a97c8, 0x3c00010}, | ||
| 2779 | {0x3c00000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3c00010}, | ||
| 2780 | {0x3c00000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3c00010}, | ||
| 2781 | {0x3c00000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c8, 0x3c00010}, | ||
| 2782 | {0x3c00000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3c00010}, | ||
| 2783 | {0x3c00000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 2784 | {0x3c00000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 2785 | {0x3c00000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3c00000}, | ||
| 2786 | {0x3c00000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3c00080}, | ||
| 2787 | {0x3c00000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3c00080}, | ||
| 2788 | {0x3c00000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3c00080}, | ||
| 2789 | {0x3c00000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3c00080}, | ||
| 2790 | {0x3c00000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3c00080}, | ||
| 2791 | {0x3c00000, 0xe6ff1a14, 0x800000, 0xe6ff1a13, 0x3c00010}, | ||
| 2792 | {0x3c00000, 0xe6ff1a14, 0x800002, 0xe6ff1a13, 0x3c00010}, | ||
| 2793 | {0x3c00000, 0xe6ff1a14, 0x1398437, 0xe6ff1a13, 0x3c00010}, | ||
| 2794 | {0x3c00000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a13, 0x3c00010}, | ||
| 2795 | {0x3c00000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a13, 0x3c00010}, | ||
| 2796 | {0x3c00000, 0xe6ff1a14, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 2797 | {0x3c00000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 2798 | {0x3c00000, 0xe6ff1a14, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 2799 | {0x3c00000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2800 | {0x3c00000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2801 | {0x3c00000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2802 | {0x3c00000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2803 | {0x3c00000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2804 | {0x3c00000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2805 | {0x3c00000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2806 | {0x3c00000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3c00000}, | ||
| 2807 | {0x3c00000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3c00080}, | ||
| 2808 | {0x3c00000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3c00080}, | ||
| 2809 | {0x3c00000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3c00080}, | ||
| 2810 | {0x3c00000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3c00080}, | ||
| 2811 | {0x3c00000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3c00080}, | ||
| 2812 | {0x3c00000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3c00010}, | ||
| 2813 | {0x3c00000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3c00010}, | ||
| 2814 | {0x3c00000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3c00010}, | ||
| 2815 | {0x3c00000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3c00010}, | ||
| 2816 | {0x3c00000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3c00010}, | ||
| 2817 | {0x3c00000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 2818 | {0x3c00000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 2819 | {0x3c00000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 2820 | {0x3c00000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2821 | {0x3c00000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2822 | {0x3c00000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2823 | {0x3c00000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2824 | {0x3c00000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2825 | {0x3c00000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2826 | {0x3c00000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2827 | {0x3c00000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a13, 0x3c00010}, | ||
| 2828 | {0x3c00000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3c00000}, | ||
| 2829 | {0x3c00000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 2830 | {0x3c00000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3c00010}, | ||
| 2831 | {0x3c00000, 0xe6ff1a14, 0x9503366, 0xe6ff1a13, 0x3c00010}, | ||
| 2832 | {0x3c00000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3c00010}, | ||
| 2833 | {0x3c00000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3c00000}, | ||
| 2834 | {0x3c00000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 2835 | {0x3c00000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3c00010}, | ||
| 2836 | {0x3c00000, 0xe6ff1a14, 0x966320b, 0xe6ff1a13, 0x3c00010}, | ||
| 2837 | {0x3c00000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3c00010}, | ||
| 2838 | {0x3c00000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3c00010}, | ||
| 2839 | {0x3c00000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a13, 0x3c00010}, | ||
| 2840 | {0x3c00000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a13, 0x3c00010}, | ||
| 2841 | {0x3c00000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a13, 0x3c00010}, | ||
| 2842 | {0x3c00000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 2843 | {0x3c00000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3c00000}, | ||
| 2844 | {0x3c00000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3c00080}, | ||
| 2845 | {0x3c00000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3c00080}, | ||
| 2846 | {0x3c00000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3c00080}, | ||
| 2847 | {0x3c00000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3c00080}, | ||
| 2848 | {0x3c00000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3c00080}, | ||
| 2849 | {0x3c00000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3c00010}, | ||
| 2850 | {0x3c00000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3c00010}, | ||
| 2851 | {0x3c00000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3c00010}, | ||
| 2852 | {0x3c00000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3c00010}, | ||
| 2853 | {0x3c00000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3c00010}, | ||
| 2854 | {0x3c00000, 0x77f31e2f, 0x751f853a, 0x77f81a58, 0x3c00010}, | ||
| 2855 | {0x3c00000, 0x77f31e2f, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, | ||
| 2856 | {0x3c00000, 0x77f31e2f, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, | ||
| 2857 | {0x3c00000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2858 | {0x3c00000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2859 | {0x3c00000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2860 | {0x3c00000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2861 | {0x3c00000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2862 | {0x3c00000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2863 | {0x3c00000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2864 | {0x3c00000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3c00000}, | ||
| 2865 | {0x3c00000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3c00080}, | ||
| 2866 | {0x3c00000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3c00080}, | ||
| 2867 | {0x3c00000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3c00080}, | ||
| 2868 | {0x3c00000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3c00080}, | ||
| 2869 | {0x3c00000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3c00080}, | ||
| 2870 | {0x3c00000, 0x77f31e2f, 0x80800000, 0x77f31e2e, 0x3c00010}, | ||
| 2871 | {0x3c00000, 0x77f31e2f, 0x80800002, 0x77f31e2e, 0x3c00010}, | ||
| 2872 | {0x3c00000, 0x77f31e2f, 0x81398437, 0x77f31e2e, 0x3c00010}, | ||
| 2873 | {0x3c00000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2e, 0x3c00010}, | ||
| 2874 | {0x3c00000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2e, 0x3c00010}, | ||
| 2875 | {0x3c00000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3c00010}, | ||
| 2876 | {0x3c00000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe09, 0x3c00010}, | ||
| 2877 | {0x3c00000, 0x77f31e2f, 0xff7fffff, 0xff7ffe18, 0x3c00010}, | ||
| 2878 | {0x3c00000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2879 | {0x3c00000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2880 | {0x3c00000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2881 | {0x3c00000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2882 | {0x3c00000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2883 | {0x3c00000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2884 | {0x3c00000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2885 | {0x3c00000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3c00010}, | ||
| 2886 | {0x3c00000, 0x77f31e2f, 0xe73a5134, 0x77f31e2e, 0x3c00010}, | ||
| 2887 | {0x3c00000, 0x77f31e2f, 0x7c994e9e, 0x7c998b65, 0x3c00010}, | ||
| 2888 | {0x3c00000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3c00010}, | ||
| 2889 | {0x3c00000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3c00010}, | ||
| 2890 | {0x3c00000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2e, 0x3c00010}, | ||
| 2891 | {0x3c00000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2e, 0x3c00010}, | ||
| 2892 | {0x3c00000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3c00000}, | ||
| 2893 | {0x3c00000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2e, 0x3c00010}, | ||
| 2894 | {0x3c00000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3c00010}, | ||
| 2895 | {0x3c00000, 0x77f31e2f, 0xb26bddee, 0x77f31e2e, 0x3c00010}, | ||
| 2896 | {0x3c00000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2e, 0x3c00010}, | ||
| 2897 | {0x3c00000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3c00010}, | ||
| 2898 | {0x3c00000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3c00010}, | ||
| 2899 | {0x3c00000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3c00010}, | ||
| 2900 | {0x3c00000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3c00010}, | ||
| 2901 | {0x3c00000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3c00000}, | ||
| 2902 | {0x3c00000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3c00080}, | ||
| 2903 | {0x3c00000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3c00080}, | ||
| 2904 | {0x3c00000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3c00080}, | ||
| 2905 | {0x3c00000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3c00080}, | ||
| 2906 | {0x3c00000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3c00080}, | ||
| 2907 | {0x3c00000, 0xaab4d7d8, 0x800000, 0xaab4d7d7, 0x3c00010}, | ||
| 2908 | {0x3c00000, 0xaab4d7d8, 0x800002, 0xaab4d7d7, 0x3c00010}, | ||
| 2909 | {0x3c00000, 0xaab4d7d8, 0x1398437, 0xaab4d7d7, 0x3c00010}, | ||
| 2910 | {0x3c00000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d7, 0x3c00010}, | ||
| 2911 | {0x3c00000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d7, 0x3c00010}, | ||
| 2912 | {0x3c00000, 0xaab4d7d8, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 2913 | {0x3c00000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 2914 | {0x3c00000, 0xaab4d7d8, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 2915 | {0x3c00000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2916 | {0x3c00000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2917 | {0x3c00000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2918 | {0x3c00000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2919 | {0x3c00000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2920 | {0x3c00000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2921 | {0x3c00000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2922 | {0x3c00000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3c00000}, | ||
| 2923 | {0x3c00000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3c00080}, | ||
| 2924 | {0x3c00000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3c00080}, | ||
| 2925 | {0x3c00000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3c00080}, | ||
| 2926 | {0x3c00000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3c00080}, | ||
| 2927 | {0x3c00000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3c00080}, | ||
| 2928 | {0x3c00000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3c00010}, | ||
| 2929 | {0x3c00000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3c00010}, | ||
| 2930 | {0x3c00000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3c00010}, | ||
| 2931 | {0x3c00000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3c00010}, | ||
| 2932 | {0x3c00000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3c00010}, | ||
| 2933 | {0x3c00000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 2934 | {0x3c00000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 2935 | {0x3c00000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 2936 | {0x3c00000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2937 | {0x3c00000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2938 | {0x3c00000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2939 | {0x3c00000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2940 | {0x3c00000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2941 | {0x3c00000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2942 | {0x3c00000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 2943 | {0x3c00000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 2944 | {0x3c00000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 2945 | {0x3c00000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 2946 | {0x3c00000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 2947 | {0x3c00000, 0xaab4d7d8, 0x9503366, 0xaab4d7d7, 0x3c00010}, | ||
| 2948 | {0x3c00000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, | ||
| 2949 | {0x3c00000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 2950 | {0x3c00000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 2951 | {0x3c00000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3c00000}, | ||
| 2952 | {0x3c00000, 0xaab4d7d8, 0x966320b, 0xaab4d7d7, 0x3c00010}, | ||
| 2953 | {0x3c00000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf57, 0x3c00010}, | ||
| 2954 | {0x3c00000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d5, 0x3c00010}, | ||
| 2955 | {0x3c00000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3c00010}, | ||
| 2956 | {0x3c00000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, | ||
| 2957 | {0x3c00000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 2958 | {0x3c00000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 2959 | {0x3c00000, 0x966320b, 0x0, 0x966320b, 0x3c00000}, | ||
| 2960 | {0x3c00000, 0x966320b, 0x1, 0x966320b, 0x3c00080}, | ||
| 2961 | {0x3c00000, 0x966320b, 0x76, 0x966320b, 0x3c00080}, | ||
| 2962 | {0x3c00000, 0x966320b, 0x2b94, 0x966320b, 0x3c00080}, | ||
| 2963 | {0x3c00000, 0x966320b, 0x636d24, 0x966320b, 0x3c00080}, | ||
| 2964 | {0x3c00000, 0x966320b, 0x7fffff, 0x966320b, 0x3c00080}, | ||
| 2965 | {0x3c00000, 0x966320b, 0x800000, 0x966324b, 0x3c00000}, | ||
| 2966 | {0x3c00000, 0x966320b, 0x800002, 0x966324b, 0x3c00010}, | ||
| 2967 | {0x3c00000, 0x966320b, 0x1398437, 0x96632c4, 0x3c00010}, | ||
| 2968 | {0x3c00000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3c00010}, | ||
| 2969 | {0x3c00000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3c00010}, | ||
| 2970 | {0x3c00000, 0x966320b, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 2971 | {0x3c00000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 2972 | {0x3c00000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 2973 | {0x3c00000, 0x966320b, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 2974 | {0x3c00000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 2975 | {0x3c00000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 2976 | {0x3c00000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2977 | {0x3c00000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 2978 | {0x3c00000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 2979 | {0x3c00000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 2980 | {0x3c00000, 0x966320b, 0x80000000, 0x966320b, 0x3c00000}, | ||
| 2981 | {0x3c00000, 0x966320b, 0x80000001, 0x966320b, 0x3c00080}, | ||
| 2982 | {0x3c00000, 0x966320b, 0x80000076, 0x966320b, 0x3c00080}, | ||
| 2983 | {0x3c00000, 0x966320b, 0x80002b94, 0x966320b, 0x3c00080}, | ||
| 2984 | {0x3c00000, 0x966320b, 0x80636d24, 0x966320b, 0x3c00080}, | ||
| 2985 | {0x3c00000, 0x966320b, 0x807fffff, 0x966320b, 0x3c00080}, | ||
| 2986 | {0x3c00000, 0x966320b, 0x80800000, 0x96631cb, 0x3c00000}, | ||
| 2987 | {0x3c00000, 0x966320b, 0x80800002, 0x96631ca, 0x3c00010}, | ||
| 2988 | {0x3c00000, 0x966320b, 0x81398437, 0x9663151, 0x3c00010}, | ||
| 2989 | {0x3c00000, 0x966320b, 0x8ba98d27, 0x8ba25b96, 0x3c00010}, | ||
| 2990 | {0x3c00000, 0x966320b, 0x8ba98d7a, 0x8ba25be9, 0x3c00010}, | ||
| 2991 | {0x3c00000, 0x966320b, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 2992 | {0x3c00000, 0x966320b, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 2993 | {0x3c00000, 0x966320b, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 2994 | {0x3c00000, 0x966320b, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 2995 | {0x3c00000, 0x966320b, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 2996 | {0x3c00000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 2997 | {0x3c00000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 2998 | {0x3c00000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 2999 | {0x3c00000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3000 | {0x3c00000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 3001 | {0x3c00000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 3002 | {0x3c00000, 0x966320b, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 3003 | {0x3c00000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 3004 | {0x3c00000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 3005 | {0x3c00000, 0x966320b, 0x9503366, 0x9db32b8, 0x3c00010}, | ||
| 3006 | {0x3c00000, 0x966320b, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, | ||
| 3007 | {0x3c00000, 0x966320b, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 3008 | {0x3c00000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 3009 | {0x3c00000, 0x966320b, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, | ||
| 3010 | {0x3c00000, 0x966320b, 0x966320b, 0x9e6320b, 0x3c00000}, | ||
| 3011 | {0x3c00000, 0x966320b, 0xb26bddee, 0xb26bdded, 0x3c00010}, | ||
| 3012 | {0x3c00000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, | ||
| 3013 | {0x3c00000, 0x966320b, 0x317285d3, 0x317285d3, 0x3c00010}, | ||
| 3014 | {0x3c00000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, | ||
| 3015 | {0x3c00000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 3016 | {0x3c00000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 3017 | {0x3c00000, 0xb26bddee, 0x0, 0xb26bddee, 0x3c00000}, | ||
| 3018 | {0x3c00000, 0xb26bddee, 0x1, 0xb26bddee, 0x3c00080}, | ||
| 3019 | {0x3c00000, 0xb26bddee, 0x76, 0xb26bddee, 0x3c00080}, | ||
| 3020 | {0x3c00000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3c00080}, | ||
| 3021 | {0x3c00000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3c00080}, | ||
| 3022 | {0x3c00000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3c00080}, | ||
| 3023 | {0x3c00000, 0xb26bddee, 0x800000, 0xb26bdded, 0x3c00010}, | ||
| 3024 | {0x3c00000, 0xb26bddee, 0x800002, 0xb26bdded, 0x3c00010}, | ||
| 3025 | {0x3c00000, 0xb26bddee, 0x1398437, 0xb26bdded, 0x3c00010}, | ||
| 3026 | {0x3c00000, 0xb26bddee, 0xba98d27, 0xb26bdded, 0x3c00010}, | ||
| 3027 | {0x3c00000, 0xb26bddee, 0xba98d7a, 0xb26bdded, 0x3c00010}, | ||
| 3028 | {0x3c00000, 0xb26bddee, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 3029 | {0x3c00000, 0xb26bddee, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 3030 | {0x3c00000, 0xb26bddee, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 3031 | {0x3c00000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 3032 | {0x3c00000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 3033 | {0x3c00000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 3034 | {0x3c00000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3035 | {0x3c00000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 3036 | {0x3c00000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3037 | {0x3c00000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 3038 | {0x3c00000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3c00000}, | ||
| 3039 | {0x3c00000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3c00080}, | ||
| 3040 | {0x3c00000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3c00080}, | ||
| 3041 | {0x3c00000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3c00080}, | ||
| 3042 | {0x3c00000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3c00080}, | ||
| 3043 | {0x3c00000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3c00080}, | ||
| 3044 | {0x3c00000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3c00010}, | ||
| 3045 | {0x3c00000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3c00010}, | ||
| 3046 | {0x3c00000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3c00010}, | ||
| 3047 | {0x3c00000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3c00010}, | ||
| 3048 | {0x3c00000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3c00010}, | ||
| 3049 | {0x3c00000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 3050 | {0x3c00000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 3051 | {0x3c00000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 3052 | {0x3c00000, 0xb26bddee, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 3053 | {0x3c00000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 3054 | {0x3c00000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 3055 | {0x3c00000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3056 | {0x3c00000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 3057 | {0x3c00000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3058 | {0x3c00000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 3059 | {0x3c00000, 0xb26bddee, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 3060 | {0x3c00000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 3061 | {0x3c00000, 0xb26bddee, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 3062 | {0x3c00000, 0xb26bddee, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 3063 | {0x3c00000, 0xb26bddee, 0x9503366, 0xb26bdded, 0x3c00010}, | ||
| 3064 | {0x3c00000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, | ||
| 3065 | {0x3c00000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 3066 | {0x3c00000, 0xb26bddee, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 3067 | {0x3c00000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf57, 0x3c00010}, | ||
| 3068 | {0x3c00000, 0xb26bddee, 0x966320b, 0xb26bdded, 0x3c00010}, | ||
| 3069 | {0x3c00000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3c00000}, | ||
| 3070 | {0x3c00000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8e, 0x3c00010}, | ||
| 3071 | {0x3c00000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3c00010}, | ||
| 3072 | {0x3c00000, 0xb26bddee, 0x3c9623b1, 0x3c9623a9, 0x3c00010}, | ||
| 3073 | {0x3c00000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 3074 | {0x3c00000, 0xb26bddee, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 3075 | {0x3c00000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3c00000}, | ||
| 3076 | {0x3c00000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3c00080}, | ||
| 3077 | {0x3c00000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3c00080}, | ||
| 3078 | {0x3c00000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3c00080}, | ||
| 3079 | {0x3c00000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3c00080}, | ||
| 3080 | {0x3c00000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3c00080}, | ||
| 3081 | {0x3c00000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d2, 0x3c00010}, | ||
| 3082 | {0x3c00000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d2, 0x3c00010}, | ||
| 3083 | {0x3c00000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d2, 0x3c00010}, | ||
| 3084 | {0x3c00000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d2, 0x3c00010}, | ||
| 3085 | {0x3c00000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d2, 0x3c00010}, | ||
| 3086 | {0x3c00000, 0xb5c8e5d3, 0x751f853a, 0x751f8539, 0x3c00010}, | ||
| 3087 | {0x3c00000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, | ||
| 3088 | {0x3c00000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, | ||
| 3089 | {0x3c00000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 3090 | {0x3c00000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 3091 | {0x3c00000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 3092 | {0x3c00000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3093 | {0x3c00000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 3094 | {0x3c00000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3095 | {0x3c00000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 3096 | {0x3c00000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3c00000}, | ||
| 3097 | {0x3c00000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3c00080}, | ||
| 3098 | {0x3c00000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3c00080}, | ||
| 3099 | {0x3c00000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3c00080}, | ||
| 3100 | {0x3c00000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3c00080}, | ||
| 3101 | {0x3c00000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3c00080}, | ||
| 3102 | {0x3c00000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3c00010}, | ||
| 3103 | {0x3c00000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3c00010}, | ||
| 3104 | {0x3c00000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3c00010}, | ||
| 3105 | {0x3c00000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3c00010}, | ||
| 3106 | {0x3c00000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3c00010}, | ||
| 3107 | {0x3c00000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3c00010}, | ||
| 3108 | {0x3c00000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, | ||
| 3109 | {0x3c00000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3c00010}, | ||
| 3110 | {0x3c00000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 3111 | {0x3c00000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 3112 | {0x3c00000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 3113 | {0x3c00000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3114 | {0x3c00000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 3115 | {0x3c00000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3116 | {0x3c00000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 3117 | {0x3c00000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, | ||
| 3118 | {0x3c00000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3c00010}, | ||
| 3119 | {0x3c00000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, | ||
| 3120 | {0x3c00000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, | ||
| 3121 | {0x3c00000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d2, 0x3c00010}, | ||
| 3122 | {0x3c00000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3c00010}, | ||
| 3123 | {0x3c00000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, | ||
| 3124 | {0x3c00000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, | ||
| 3125 | {0x3c00000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d5, 0x3c00010}, | ||
| 3126 | {0x3c00000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d2, 0x3c00010}, | ||
| 3127 | {0x3c00000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8e, 0x3c00010}, | ||
| 3128 | {0x3c00000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3c00000}, | ||
| 3129 | {0x3c00000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3c00010}, | ||
| 3130 | {0x3c00000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3c00010}, | ||
| 3131 | {0x3c00000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, | ||
| 3132 | {0x3c00000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, | ||
| 3133 | {0x3c00000, 0x317285d3, 0x0, 0x317285d3, 0x3c00000}, | ||
| 3134 | {0x3c00000, 0x317285d3, 0x1, 0x317285d3, 0x3c00080}, | ||
| 3135 | {0x3c00000, 0x317285d3, 0x76, 0x317285d3, 0x3c00080}, | ||
| 3136 | {0x3c00000, 0x317285d3, 0x2b94, 0x317285d3, 0x3c00080}, | ||
| 3137 | {0x3c00000, 0x317285d3, 0x636d24, 0x317285d3, 0x3c00080}, | ||
| 3138 | {0x3c00000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3c00080}, | ||
| 3139 | {0x3c00000, 0x317285d3, 0x800000, 0x317285d3, 0x3c00010}, | ||
| 3140 | {0x3c00000, 0x317285d3, 0x800002, 0x317285d3, 0x3c00010}, | ||
| 3141 | {0x3c00000, 0x317285d3, 0x1398437, 0x317285d3, 0x3c00010}, | ||
| 3142 | {0x3c00000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3c00010}, | ||
| 3143 | {0x3c00000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3c00010}, | ||
| 3144 | {0x3c00000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 3145 | {0x3c00000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 3146 | {0x3c00000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 3147 | {0x3c00000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 3148 | {0x3c00000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 3149 | {0x3c00000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 3150 | {0x3c00000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3151 | {0x3c00000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 3152 | {0x3c00000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3153 | {0x3c00000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 3154 | {0x3c00000, 0x317285d3, 0x80000000, 0x317285d3, 0x3c00000}, | ||
| 3155 | {0x3c00000, 0x317285d3, 0x80000001, 0x317285d3, 0x3c00080}, | ||
| 3156 | {0x3c00000, 0x317285d3, 0x80000076, 0x317285d3, 0x3c00080}, | ||
| 3157 | {0x3c00000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3c00080}, | ||
| 3158 | {0x3c00000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3c00080}, | ||
| 3159 | {0x3c00000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3c00080}, | ||
| 3160 | {0x3c00000, 0x317285d3, 0x80800000, 0x317285d2, 0x3c00010}, | ||
| 3161 | {0x3c00000, 0x317285d3, 0x80800002, 0x317285d2, 0x3c00010}, | ||
| 3162 | {0x3c00000, 0x317285d3, 0x81398437, 0x317285d2, 0x3c00010}, | ||
| 3163 | {0x3c00000, 0x317285d3, 0x8ba98d27, 0x317285d2, 0x3c00010}, | ||
| 3164 | {0x3c00000, 0x317285d3, 0x8ba98d7a, 0x317285d2, 0x3c00010}, | ||
| 3165 | {0x3c00000, 0x317285d3, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 3166 | {0x3c00000, 0x317285d3, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 3167 | {0x3c00000, 0x317285d3, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 3168 | {0x3c00000, 0x317285d3, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 3169 | {0x3c00000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 3170 | {0x3c00000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 3171 | {0x3c00000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3172 | {0x3c00000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 3173 | {0x3c00000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3174 | {0x3c00000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 3175 | {0x3c00000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 3176 | {0x3c00000, 0x317285d3, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 3177 | {0x3c00000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 3178 | {0x3c00000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 3179 | {0x3c00000, 0x317285d3, 0x9503366, 0x317285d3, 0x3c00010}, | ||
| 3180 | {0x3c00000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, | ||
| 3181 | {0x3c00000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 3182 | {0x3c00000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 3183 | {0x3c00000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3c00010}, | ||
| 3184 | {0x3c00000, 0x317285d3, 0x966320b, 0x317285d3, 0x3c00010}, | ||
| 3185 | {0x3c00000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3c00010}, | ||
| 3186 | {0x3c00000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3c00010}, | ||
| 3187 | {0x3c00000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3c00000}, | ||
| 3188 | {0x3c00000, 0x317285d3, 0x3c9623b1, 0x3c9623b2, 0x3c00010}, | ||
| 3189 | {0x3c00000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 3190 | {0x3c00000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 3191 | {0x3c00000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3c00000}, | ||
| 3192 | {0x3c00000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3c00080}, | ||
| 3193 | {0x3c00000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3c00080}, | ||
| 3194 | {0x3c00000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3c00080}, | ||
| 3195 | {0x3c00000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3c00080}, | ||
| 3196 | {0x3c00000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3c00080}, | ||
| 3197 | {0x3c00000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3c00010}, | ||
| 3198 | {0x3c00000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3c00010}, | ||
| 3199 | {0x3c00000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3c00010}, | ||
| 3200 | {0x3c00000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3c00010}, | ||
| 3201 | {0x3c00000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3c00010}, | ||
| 3202 | {0x3c00000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 3203 | {0x3c00000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 3204 | {0x3c00000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 3205 | {0x3c00000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 3206 | {0x3c00000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 3207 | {0x3c00000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 3208 | {0x3c00000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3209 | {0x3c00000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 3210 | {0x3c00000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3211 | {0x3c00000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 3212 | {0x3c00000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3c00000}, | ||
| 3213 | {0x3c00000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3c00080}, | ||
| 3214 | {0x3c00000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3c00080}, | ||
| 3215 | {0x3c00000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3c00080}, | ||
| 3216 | {0x3c00000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3c00080}, | ||
| 3217 | {0x3c00000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3c00080}, | ||
| 3218 | {0x3c00000, 0x3c9623b1, 0x80800000, 0x3c9623b0, 0x3c00010}, | ||
| 3219 | {0x3c00000, 0x3c9623b1, 0x80800002, 0x3c9623b0, 0x3c00010}, | ||
| 3220 | {0x3c00000, 0x3c9623b1, 0x81398437, 0x3c9623b0, 0x3c00010}, | ||
| 3221 | {0x3c00000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b0, 0x3c00010}, | ||
| 3222 | {0x3c00000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b0, 0x3c00010}, | ||
| 3223 | {0x3c00000, 0x3c9623b1, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 3224 | {0x3c00000, 0x3c9623b1, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 3225 | {0x3c00000, 0x3c9623b1, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 3226 | {0x3c00000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 3227 | {0x3c00000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 3228 | {0x3c00000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 3229 | {0x3c00000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3230 | {0x3c00000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 3231 | {0x3c00000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3232 | {0x3c00000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 3233 | {0x3c00000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, | ||
| 3234 | {0x3c00000, 0x3c9623b1, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 3235 | {0x3c00000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 3236 | {0x3c00000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 3237 | {0x3c00000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3c00010}, | ||
| 3238 | {0x3c00000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3c00010}, | ||
| 3239 | {0x3c00000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 3240 | {0x3c00000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 3241 | {0x3c00000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b0, 0x3c00010}, | ||
| 3242 | {0x3c00000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3c00010}, | ||
| 3243 | {0x3c00000, 0x3c9623b1, 0xb26bddee, 0x3c9623a9, 0x3c00010}, | ||
| 3244 | {0x3c00000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3c00010}, | ||
| 3245 | {0x3c00000, 0x3c9623b1, 0x317285d3, 0x3c9623b2, 0x3c00010}, | ||
| 3246 | {0x3c00000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3c00000}, | ||
| 3247 | {0x3c00000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, | ||
| 3248 | {0x3c00000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 3249 | {0x3c00000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3c00000}, | ||
| 3250 | {0x3c00000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3c00080}, | ||
| 3251 | {0x3c00000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3c00080}, | ||
| 3252 | {0x3c00000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3c00080}, | ||
| 3253 | {0x3c00000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3c00080}, | ||
| 3254 | {0x3c00000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3c00080}, | ||
| 3255 | {0x3c00000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3c00010}, | ||
| 3256 | {0x3c00000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3c00010}, | ||
| 3257 | {0x3c00000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3c00010}, | ||
| 3258 | {0x3c00000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3c00010}, | ||
| 3259 | {0x3c00000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3c00010}, | ||
| 3260 | {0x3c00000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3c00010}, | ||
| 3261 | {0x3c00000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, | ||
| 3262 | {0x3c00000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, | ||
| 3263 | {0x3c00000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 3264 | {0x3c00000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 3265 | {0x3c00000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 3266 | {0x3c00000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3267 | {0x3c00000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 3268 | {0x3c00000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3269 | {0x3c00000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 3270 | {0x3c00000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3c00000}, | ||
| 3271 | {0x3c00000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3c00080}, | ||
| 3272 | {0x3c00000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3c00080}, | ||
| 3273 | {0x3c00000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3c00080}, | ||
| 3274 | {0x3c00000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3c00080}, | ||
| 3275 | {0x3c00000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3c00080}, | ||
| 3276 | {0x3c00000, 0x51fd2c7c, 0x80800000, 0x51fd2c7b, 0x3c00010}, | ||
| 3277 | {0x3c00000, 0x51fd2c7c, 0x80800002, 0x51fd2c7b, 0x3c00010}, | ||
| 3278 | {0x3c00000, 0x51fd2c7c, 0x81398437, 0x51fd2c7b, 0x3c00010}, | ||
| 3279 | {0x3c00000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7b, 0x3c00010}, | ||
| 3280 | {0x3c00000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7b, 0x3c00010}, | ||
| 3281 | {0x3c00000, 0x51fd2c7c, 0xf51f853a, 0xf51f8539, 0x3c00010}, | ||
| 3282 | {0x3c00000, 0x51fd2c7c, 0xff7ffff0, 0xff7fffef, 0x3c00010}, | ||
| 3283 | {0x3c00000, 0x51fd2c7c, 0xff7fffff, 0xff7ffffe, 0x3c00010}, | ||
| 3284 | {0x3c00000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 3285 | {0x3c00000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 3286 | {0x3c00000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 3287 | {0x3c00000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3288 | {0x3c00000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 3289 | {0x3c00000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3290 | {0x3c00000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 3291 | {0x3c00000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3c00010}, | ||
| 3292 | {0x3c00000, 0x51fd2c7c, 0xe73a5134, 0xe73a5133, 0x3c00010}, | ||
| 3293 | {0x3c00000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, | ||
| 3294 | {0x3c00000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, | ||
| 3295 | {0x3c00000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3c00010}, | ||
| 3296 | {0x3c00000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7b, 0x3c00010}, | ||
| 3297 | {0x3c00000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, | ||
| 3298 | {0x3c00000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, | ||
| 3299 | {0x3c00000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7b, 0x3c00010}, | ||
| 3300 | {0x3c00000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3c00010}, | ||
| 3301 | {0x3c00000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7b, 0x3c00010}, | ||
| 3302 | {0x3c00000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7b, 0x3c00010}, | ||
| 3303 | {0x3c00000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3c00010}, | ||
| 3304 | {0x3c00000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3c00010}, | ||
| 3305 | {0x3c00000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3c00000}, | ||
| 3306 | {0x3c00000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, | ||
| 3307 | {0x3c00000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3c00000}, | ||
| 3308 | {0x3c00000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3c00080}, | ||
| 3309 | {0x3c00000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3c00080}, | ||
| 3310 | {0x3c00000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3c00080}, | ||
| 3311 | {0x3c00000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3c00080}, | ||
| 3312 | {0x3c00000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3c00080}, | ||
| 3313 | {0x3c00000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3c00010}, | ||
| 3314 | {0x3c00000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3c00010}, | ||
| 3315 | {0x3c00000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3c00010}, | ||
| 3316 | {0x3c00000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3c00010}, | ||
| 3317 | {0x3c00000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3c00010}, | ||
| 3318 | {0x3c00000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3c00010}, | ||
| 3319 | {0x3c00000, 0x7b906a6c, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, | ||
| 3320 | {0x3c00000, 0x7b906a6c, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, | ||
| 3321 | {0x3c00000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3c00000}, | ||
| 3322 | {0x3c00000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3c00001}, | ||
| 3323 | {0x3c00000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3c00001}, | ||
| 3324 | {0x3c00000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3325 | {0x3c00000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3c00000}, | ||
| 3326 | {0x3c00000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3327 | {0x3c00000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3c00000}, | ||
| 3328 | {0x3c00000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3c00000}, | ||
| 3329 | {0x3c00000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3c00080}, | ||
| 3330 | {0x3c00000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3c00080}, | ||
| 3331 | {0x3c00000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3c00080}, | ||
| 3332 | {0x3c00000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3c00080}, | ||
| 3333 | {0x3c00000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3c00080}, | ||
| 3334 | {0x3c00000, 0x7b906a6c, 0x80800000, 0x7b906a6b, 0x3c00010}, | ||
| 3335 | {0x3c00000, 0x7b906a6c, 0x80800002, 0x7b906a6b, 0x3c00010}, | ||
| 3336 | {0x3c00000, 0x7b906a6c, 0x81398437, 0x7b906a6b, 0x3c00010}, | ||
| 3337 | {0x3c00000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6b, 0x3c00010}, | ||
| 3338 | {0x3c00000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6b, 0x3c00010}, | ||
| 3339 | {0x3c00000, 0x7b906a6c, 0xf51f853a, 0x7b90656f, 0x3c00010}, | ||
| 3340 | {0x3c00000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3c00010}, | ||
| 3341 | {0x3c00000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3c00010}, | ||
| 3342 | {0x3c00000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3c00000}, | ||
| 3343 | {0x3c00000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3c00001}, | ||
| 3344 | {0x3c00000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3c00001}, | ||
| 3345 | {0x3c00000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3c00001}, | ||
| 3346 | {0x3c00000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3c00000}, | ||
| 3347 | {0x3c00000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3c00000}, | ||
| 3348 | {0x3c00000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3c00000}, | ||
| 3349 | {0x3c00000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3c00010}, | ||
| 3350 | {0x3c00000, 0x7b906a6c, 0xe73a5134, 0x7b906a6b, 0x3c00010}, | ||
| 3351 | {0x3c00000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3c00000}, | ||
| 3352 | {0x3c00000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3c00010}, | ||
| 3353 | {0x3c00000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3c00010}, | ||
| 3354 | {0x3c00000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6b, 0x3c00010}, | ||
| 3355 | {0x3c00000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6b, 0x3c00010}, | ||
| 3356 | {0x3c00000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3c00010}, | ||
| 3357 | {0x3c00000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6b, 0x3c00010}, | ||
| 3358 | {0x3c00000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3c00010}, | ||
| 3359 | {0x3c00000, 0x7b906a6c, 0xb26bddee, 0x7b906a6b, 0x3c00010}, | ||
| 3360 | {0x3c00000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6b, 0x3c00010}, | ||
| 3361 | {0x3c00000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3c00010}, | ||
| 3362 | {0x3c00000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3c00010}, | ||
| 3363 | {0x3c00000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3c00010}, | ||
| 3364 | {0x3c00000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3c00000}, | ||
| 3365 | {0x3800000, 0x0, 0x0, 0x0, 0x3800000}, | ||
| 3366 | {0x3800000, 0x0, 0x1, 0x0, 0x3800080}, | ||
| 3367 | {0x3800000, 0x0, 0x76, 0x0, 0x3800080}, | ||
| 3368 | {0x3800000, 0x0, 0x2b94, 0x0, 0x3800080}, | ||
| 3369 | {0x3800000, 0x0, 0x636d24, 0x0, 0x3800080}, | ||
| 3370 | {0x3800000, 0x0, 0x7fffff, 0x0, 0x3800080}, | ||
| 3371 | {0x3800000, 0x0, 0x800000, 0x800000, 0x3800000}, | ||
| 3372 | {0x3800000, 0x0, 0x800002, 0x800002, 0x3800000}, | ||
| 3373 | {0x3800000, 0x0, 0x1398437, 0x1398437, 0x3800000}, | ||
| 3374 | {0x3800000, 0x0, 0xba98d27, 0xba98d27, 0x3800000}, | ||
| 3375 | {0x3800000, 0x0, 0xba98d7a, 0xba98d7a, 0x3800000}, | ||
| 3376 | {0x3800000, 0x0, 0x751f853a, 0x751f853a, 0x3800000}, | ||
| 3377 | {0x3800000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3800000}, | ||
| 3378 | {0x3800000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3800000}, | ||
| 3379 | {0x3800000, 0x0, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 3380 | {0x3800000, 0x0, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 3381 | {0x3800000, 0x0, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 3382 | {0x3800000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 3383 | {0x3800000, 0x0, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 3384 | {0x3800000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3385 | {0x3800000, 0x0, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 3386 | {0x3800000, 0x0, 0x80000000, 0x80000000, 0x3800000}, | ||
| 3387 | {0x3800000, 0x0, 0x80000001, 0x0, 0x3800080}, | ||
| 3388 | {0x3800000, 0x0, 0x80000076, 0x0, 0x3800080}, | ||
| 3389 | {0x3800000, 0x0, 0x80002b94, 0x0, 0x3800080}, | ||
| 3390 | {0x3800000, 0x0, 0x80636d24, 0x0, 0x3800080}, | ||
| 3391 | {0x3800000, 0x0, 0x807fffff, 0x0, 0x3800080}, | ||
| 3392 | {0x3800000, 0x0, 0x80800000, 0x80800000, 0x3800000}, | ||
| 3393 | {0x3800000, 0x0, 0x80800002, 0x80800002, 0x3800000}, | ||
| 3394 | {0x3800000, 0x0, 0x81398437, 0x81398437, 0x3800000}, | ||
| 3395 | {0x3800000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3800000}, | ||
| 3396 | {0x3800000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3800000}, | ||
| 3397 | {0x3800000, 0x0, 0xf51f853a, 0xf51f853a, 0x3800000}, | ||
| 3398 | {0x3800000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3800000}, | ||
| 3399 | {0x3800000, 0x0, 0xff7fffff, 0xff7fffff, 0x3800000}, | ||
| 3400 | {0x3800000, 0x0, 0xff800000, 0xff800000, 0x3800000}, | ||
| 3401 | {0x3800000, 0x0, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 3402 | {0x3800000, 0x0, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 3403 | {0x3800000, 0x0, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 3404 | {0x3800000, 0x0, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 3405 | {0x3800000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3406 | {0x3800000, 0x0, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 3407 | {0x3800000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3800000}, | ||
| 3408 | {0x3800000, 0x0, 0xe73a5134, 0xe73a5134, 0x3800000}, | ||
| 3409 | {0x3800000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3800000}, | ||
| 3410 | {0x3800000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3800000}, | ||
| 3411 | {0x3800000, 0x0, 0x9503366, 0x9503366, 0x3800000}, | ||
| 3412 | {0x3800000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3800000}, | ||
| 3413 | {0x3800000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3800000}, | ||
| 3414 | {0x3800000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3800000}, | ||
| 3415 | {0x3800000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3800000}, | ||
| 3416 | {0x3800000, 0x0, 0x966320b, 0x966320b, 0x3800000}, | ||
| 3417 | {0x3800000, 0x0, 0xb26bddee, 0xb26bddee, 0x3800000}, | ||
| 3418 | {0x3800000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800000}, | ||
| 3419 | {0x3800000, 0x0, 0x317285d3, 0x317285d3, 0x3800000}, | ||
| 3420 | {0x3800000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3800000}, | ||
| 3421 | {0x3800000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3800000}, | ||
| 3422 | {0x3800000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3800000}, | ||
| 3423 | {0x3800000, 0x1, 0x0, 0x0, 0x3800080}, | ||
| 3424 | {0x3800000, 0x1, 0x1, 0x0, 0x3800080}, | ||
| 3425 | {0x3800000, 0x1, 0x76, 0x0, 0x3800080}, | ||
| 3426 | {0x3800000, 0x1, 0x2b94, 0x0, 0x3800080}, | ||
| 3427 | {0x3800000, 0x1, 0x636d24, 0x0, 0x3800080}, | ||
| 3428 | {0x3800000, 0x1, 0x7fffff, 0x0, 0x3800080}, | ||
| 3429 | {0x3800000, 0x1, 0x800000, 0x800000, 0x3800080}, | ||
| 3430 | {0x3800000, 0x1, 0x800002, 0x800002, 0x3800080}, | ||
| 3431 | {0x3800000, 0x1, 0x1398437, 0x1398437, 0x3800080}, | ||
| 3432 | {0x3800000, 0x1, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 3433 | {0x3800000, 0x1, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 3434 | {0x3800000, 0x1, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 3435 | {0x3800000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 3436 | {0x3800000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 3437 | {0x3800000, 0x1, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 3438 | {0x3800000, 0x1, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 3439 | {0x3800000, 0x1, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 3440 | {0x3800000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 3441 | {0x3800000, 0x1, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 3442 | {0x3800000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3443 | {0x3800000, 0x1, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 3444 | {0x3800000, 0x1, 0x80000000, 0x80000000, 0x3800080}, | ||
| 3445 | {0x3800000, 0x1, 0x80000001, 0x0, 0x3800080}, | ||
| 3446 | {0x3800000, 0x1, 0x80000076, 0x0, 0x3800080}, | ||
| 3447 | {0x3800000, 0x1, 0x80002b94, 0x0, 0x3800080}, | ||
| 3448 | {0x3800000, 0x1, 0x80636d24, 0x0, 0x3800080}, | ||
| 3449 | {0x3800000, 0x1, 0x807fffff, 0x0, 0x3800080}, | ||
| 3450 | {0x3800000, 0x1, 0x80800000, 0x80800000, 0x3800080}, | ||
| 3451 | {0x3800000, 0x1, 0x80800002, 0x80800002, 0x3800080}, | ||
| 3452 | {0x3800000, 0x1, 0x81398437, 0x81398437, 0x3800080}, | ||
| 3453 | {0x3800000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 3454 | {0x3800000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 3455 | {0x3800000, 0x1, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 3456 | {0x3800000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 3457 | {0x3800000, 0x1, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 3458 | {0x3800000, 0x1, 0xff800000, 0xff800000, 0x3800080}, | ||
| 3459 | {0x3800000, 0x1, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 3460 | {0x3800000, 0x1, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 3461 | {0x3800000, 0x1, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 3462 | {0x3800000, 0x1, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 3463 | {0x3800000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3464 | {0x3800000, 0x1, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 3465 | {0x3800000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 3466 | {0x3800000, 0x1, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 3467 | {0x3800000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 3468 | {0x3800000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 3469 | {0x3800000, 0x1, 0x9503366, 0x9503366, 0x3800080}, | ||
| 3470 | {0x3800000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 3471 | {0x3800000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 3472 | {0x3800000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 3473 | {0x3800000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 3474 | {0x3800000, 0x1, 0x966320b, 0x966320b, 0x3800080}, | ||
| 3475 | {0x3800000, 0x1, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 3476 | {0x3800000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 3477 | {0x3800000, 0x1, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 3478 | {0x3800000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 3479 | {0x3800000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 3480 | {0x3800000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 3481 | {0x3800000, 0x76, 0x0, 0x0, 0x3800080}, | ||
| 3482 | {0x3800000, 0x76, 0x1, 0x0, 0x3800080}, | ||
| 3483 | {0x3800000, 0x76, 0x76, 0x0, 0x3800080}, | ||
| 3484 | {0x3800000, 0x76, 0x2b94, 0x0, 0x3800080}, | ||
| 3485 | {0x3800000, 0x76, 0x636d24, 0x0, 0x3800080}, | ||
| 3486 | {0x3800000, 0x76, 0x7fffff, 0x0, 0x3800080}, | ||
| 3487 | {0x3800000, 0x76, 0x800000, 0x800000, 0x3800080}, | ||
| 3488 | {0x3800000, 0x76, 0x800002, 0x800002, 0x3800080}, | ||
| 3489 | {0x3800000, 0x76, 0x1398437, 0x1398437, 0x3800080}, | ||
| 3490 | {0x3800000, 0x76, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 3491 | {0x3800000, 0x76, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 3492 | {0x3800000, 0x76, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 3493 | {0x3800000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 3494 | {0x3800000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 3495 | {0x3800000, 0x76, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 3496 | {0x3800000, 0x76, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 3497 | {0x3800000, 0x76, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 3498 | {0x3800000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 3499 | {0x3800000, 0x76, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 3500 | {0x3800000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3501 | {0x3800000, 0x76, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 3502 | {0x3800000, 0x76, 0x80000000, 0x80000000, 0x3800080}, | ||
| 3503 | {0x3800000, 0x76, 0x80000001, 0x0, 0x3800080}, | ||
| 3504 | {0x3800000, 0x76, 0x80000076, 0x0, 0x3800080}, | ||
| 3505 | {0x3800000, 0x76, 0x80002b94, 0x0, 0x3800080}, | ||
| 3506 | {0x3800000, 0x76, 0x80636d24, 0x0, 0x3800080}, | ||
| 3507 | {0x3800000, 0x76, 0x807fffff, 0x0, 0x3800080}, | ||
| 3508 | {0x3800000, 0x76, 0x80800000, 0x80800000, 0x3800080}, | ||
| 3509 | {0x3800000, 0x76, 0x80800002, 0x80800002, 0x3800080}, | ||
| 3510 | {0x3800000, 0x76, 0x81398437, 0x81398437, 0x3800080}, | ||
| 3511 | {0x3800000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 3512 | {0x3800000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 3513 | {0x3800000, 0x76, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 3514 | {0x3800000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 3515 | {0x3800000, 0x76, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 3516 | {0x3800000, 0x76, 0xff800000, 0xff800000, 0x3800080}, | ||
| 3517 | {0x3800000, 0x76, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 3518 | {0x3800000, 0x76, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 3519 | {0x3800000, 0x76, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 3520 | {0x3800000, 0x76, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 3521 | {0x3800000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3522 | {0x3800000, 0x76, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 3523 | {0x3800000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 3524 | {0x3800000, 0x76, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 3525 | {0x3800000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 3526 | {0x3800000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 3527 | {0x3800000, 0x76, 0x9503366, 0x9503366, 0x3800080}, | ||
| 3528 | {0x3800000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 3529 | {0x3800000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 3530 | {0x3800000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 3531 | {0x3800000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 3532 | {0x3800000, 0x76, 0x966320b, 0x966320b, 0x3800080}, | ||
| 3533 | {0x3800000, 0x76, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 3534 | {0x3800000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 3535 | {0x3800000, 0x76, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 3536 | {0x3800000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 3537 | {0x3800000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 3538 | {0x3800000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 3539 | {0x3800000, 0x2b94, 0x0, 0x0, 0x3800080}, | ||
| 3540 | {0x3800000, 0x2b94, 0x1, 0x0, 0x3800080}, | ||
| 3541 | {0x3800000, 0x2b94, 0x76, 0x0, 0x3800080}, | ||
| 3542 | {0x3800000, 0x2b94, 0x2b94, 0x0, 0x3800080}, | ||
| 3543 | {0x3800000, 0x2b94, 0x636d24, 0x0, 0x3800080}, | ||
| 3544 | {0x3800000, 0x2b94, 0x7fffff, 0x0, 0x3800080}, | ||
| 3545 | {0x3800000, 0x2b94, 0x800000, 0x800000, 0x3800080}, | ||
| 3546 | {0x3800000, 0x2b94, 0x800002, 0x800002, 0x3800080}, | ||
| 3547 | {0x3800000, 0x2b94, 0x1398437, 0x1398437, 0x3800080}, | ||
| 3548 | {0x3800000, 0x2b94, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 3549 | {0x3800000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 3550 | {0x3800000, 0x2b94, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 3551 | {0x3800000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 3552 | {0x3800000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 3553 | {0x3800000, 0x2b94, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 3554 | {0x3800000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 3555 | {0x3800000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 3556 | {0x3800000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 3557 | {0x3800000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 3558 | {0x3800000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3559 | {0x3800000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 3560 | {0x3800000, 0x2b94, 0x80000000, 0x80000000, 0x3800080}, | ||
| 3561 | {0x3800000, 0x2b94, 0x80000001, 0x0, 0x3800080}, | ||
| 3562 | {0x3800000, 0x2b94, 0x80000076, 0x0, 0x3800080}, | ||
| 3563 | {0x3800000, 0x2b94, 0x80002b94, 0x0, 0x3800080}, | ||
| 3564 | {0x3800000, 0x2b94, 0x80636d24, 0x0, 0x3800080}, | ||
| 3565 | {0x3800000, 0x2b94, 0x807fffff, 0x0, 0x3800080}, | ||
| 3566 | {0x3800000, 0x2b94, 0x80800000, 0x80800000, 0x3800080}, | ||
| 3567 | {0x3800000, 0x2b94, 0x80800002, 0x80800002, 0x3800080}, | ||
| 3568 | {0x3800000, 0x2b94, 0x81398437, 0x81398437, 0x3800080}, | ||
| 3569 | {0x3800000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 3570 | {0x3800000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 3571 | {0x3800000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 3572 | {0x3800000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 3573 | {0x3800000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 3574 | {0x3800000, 0x2b94, 0xff800000, 0xff800000, 0x3800080}, | ||
| 3575 | {0x3800000, 0x2b94, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 3576 | {0x3800000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 3577 | {0x3800000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 3578 | {0x3800000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 3579 | {0x3800000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3580 | {0x3800000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 3581 | {0x3800000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 3582 | {0x3800000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 3583 | {0x3800000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 3584 | {0x3800000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 3585 | {0x3800000, 0x2b94, 0x9503366, 0x9503366, 0x3800080}, | ||
| 3586 | {0x3800000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 3587 | {0x3800000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 3588 | {0x3800000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 3589 | {0x3800000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 3590 | {0x3800000, 0x2b94, 0x966320b, 0x966320b, 0x3800080}, | ||
| 3591 | {0x3800000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 3592 | {0x3800000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 3593 | {0x3800000, 0x2b94, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 3594 | {0x3800000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 3595 | {0x3800000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 3596 | {0x3800000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 3597 | {0x3800000, 0x636d24, 0x0, 0x0, 0x3800080}, | ||
| 3598 | {0x3800000, 0x636d24, 0x1, 0x0, 0x3800080}, | ||
| 3599 | {0x3800000, 0x636d24, 0x76, 0x0, 0x3800080}, | ||
| 3600 | {0x3800000, 0x636d24, 0x2b94, 0x0, 0x3800080}, | ||
| 3601 | {0x3800000, 0x636d24, 0x636d24, 0x0, 0x3800080}, | ||
| 3602 | {0x3800000, 0x636d24, 0x7fffff, 0x0, 0x3800080}, | ||
| 3603 | {0x3800000, 0x636d24, 0x800000, 0x800000, 0x3800080}, | ||
| 3604 | {0x3800000, 0x636d24, 0x800002, 0x800002, 0x3800080}, | ||
| 3605 | {0x3800000, 0x636d24, 0x1398437, 0x1398437, 0x3800080}, | ||
| 3606 | {0x3800000, 0x636d24, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 3607 | {0x3800000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 3608 | {0x3800000, 0x636d24, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 3609 | {0x3800000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 3610 | {0x3800000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 3611 | {0x3800000, 0x636d24, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 3612 | {0x3800000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 3613 | {0x3800000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 3614 | {0x3800000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 3615 | {0x3800000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 3616 | {0x3800000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3617 | {0x3800000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 3618 | {0x3800000, 0x636d24, 0x80000000, 0x80000000, 0x3800080}, | ||
| 3619 | {0x3800000, 0x636d24, 0x80000001, 0x0, 0x3800080}, | ||
| 3620 | {0x3800000, 0x636d24, 0x80000076, 0x0, 0x3800080}, | ||
| 3621 | {0x3800000, 0x636d24, 0x80002b94, 0x0, 0x3800080}, | ||
| 3622 | {0x3800000, 0x636d24, 0x80636d24, 0x0, 0x3800080}, | ||
| 3623 | {0x3800000, 0x636d24, 0x807fffff, 0x0, 0x3800080}, | ||
| 3624 | {0x3800000, 0x636d24, 0x80800000, 0x80800000, 0x3800080}, | ||
| 3625 | {0x3800000, 0x636d24, 0x80800002, 0x80800002, 0x3800080}, | ||
| 3626 | {0x3800000, 0x636d24, 0x81398437, 0x81398437, 0x3800080}, | ||
| 3627 | {0x3800000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 3628 | {0x3800000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 3629 | {0x3800000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 3630 | {0x3800000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 3631 | {0x3800000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 3632 | {0x3800000, 0x636d24, 0xff800000, 0xff800000, 0x3800080}, | ||
| 3633 | {0x3800000, 0x636d24, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 3634 | {0x3800000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 3635 | {0x3800000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 3636 | {0x3800000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 3637 | {0x3800000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3638 | {0x3800000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 3639 | {0x3800000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 3640 | {0x3800000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 3641 | {0x3800000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 3642 | {0x3800000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 3643 | {0x3800000, 0x636d24, 0x9503366, 0x9503366, 0x3800080}, | ||
| 3644 | {0x3800000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 3645 | {0x3800000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 3646 | {0x3800000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 3647 | {0x3800000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 3648 | {0x3800000, 0x636d24, 0x966320b, 0x966320b, 0x3800080}, | ||
| 3649 | {0x3800000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 3650 | {0x3800000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 3651 | {0x3800000, 0x636d24, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 3652 | {0x3800000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 3653 | {0x3800000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 3654 | {0x3800000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 3655 | {0x3800000, 0x7fffff, 0x0, 0x0, 0x3800080}, | ||
| 3656 | {0x3800000, 0x7fffff, 0x1, 0x0, 0x3800080}, | ||
| 3657 | {0x3800000, 0x7fffff, 0x76, 0x0, 0x3800080}, | ||
| 3658 | {0x3800000, 0x7fffff, 0x2b94, 0x0, 0x3800080}, | ||
| 3659 | {0x3800000, 0x7fffff, 0x636d24, 0x0, 0x3800080}, | ||
| 3660 | {0x3800000, 0x7fffff, 0x7fffff, 0x0, 0x3800080}, | ||
| 3661 | {0x3800000, 0x7fffff, 0x800000, 0x800000, 0x3800080}, | ||
| 3662 | {0x3800000, 0x7fffff, 0x800002, 0x800002, 0x3800080}, | ||
| 3663 | {0x3800000, 0x7fffff, 0x1398437, 0x1398437, 0x3800080}, | ||
| 3664 | {0x3800000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 3665 | {0x3800000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 3666 | {0x3800000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 3667 | {0x3800000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 3668 | {0x3800000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 3669 | {0x3800000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 3670 | {0x3800000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 3671 | {0x3800000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 3672 | {0x3800000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 3673 | {0x3800000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 3674 | {0x3800000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3675 | {0x3800000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 3676 | {0x3800000, 0x7fffff, 0x80000000, 0x80000000, 0x3800080}, | ||
| 3677 | {0x3800000, 0x7fffff, 0x80000001, 0x0, 0x3800080}, | ||
| 3678 | {0x3800000, 0x7fffff, 0x80000076, 0x0, 0x3800080}, | ||
| 3679 | {0x3800000, 0x7fffff, 0x80002b94, 0x0, 0x3800080}, | ||
| 3680 | {0x3800000, 0x7fffff, 0x80636d24, 0x0, 0x3800080}, | ||
| 3681 | {0x3800000, 0x7fffff, 0x807fffff, 0x0, 0x3800080}, | ||
| 3682 | {0x3800000, 0x7fffff, 0x80800000, 0x80800000, 0x3800080}, | ||
| 3683 | {0x3800000, 0x7fffff, 0x80800002, 0x80800002, 0x3800080}, | ||
| 3684 | {0x3800000, 0x7fffff, 0x81398437, 0x81398437, 0x3800080}, | ||
| 3685 | {0x3800000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 3686 | {0x3800000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 3687 | {0x3800000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 3688 | {0x3800000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 3689 | {0x3800000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 3690 | {0x3800000, 0x7fffff, 0xff800000, 0xff800000, 0x3800080}, | ||
| 3691 | {0x3800000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 3692 | {0x3800000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 3693 | {0x3800000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 3694 | {0x3800000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 3695 | {0x3800000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 3696 | {0x3800000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 3697 | {0x3800000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 3698 | {0x3800000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 3699 | {0x3800000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 3700 | {0x3800000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 3701 | {0x3800000, 0x7fffff, 0x9503366, 0x9503366, 0x3800080}, | ||
| 3702 | {0x3800000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 3703 | {0x3800000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 3704 | {0x3800000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 3705 | {0x3800000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 3706 | {0x3800000, 0x7fffff, 0x966320b, 0x966320b, 0x3800080}, | ||
| 3707 | {0x3800000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 3708 | {0x3800000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 3709 | {0x3800000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 3710 | {0x3800000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 3711 | {0x3800000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 3712 | {0x3800000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 3713 | {0x3800000, 0x800000, 0x0, 0x800000, 0x3800000}, | ||
| 3714 | {0x3800000, 0x800000, 0x1, 0x800000, 0x3800080}, | ||
| 3715 | {0x3800000, 0x800000, 0x76, 0x800000, 0x3800080}, | ||
| 3716 | {0x3800000, 0x800000, 0x2b94, 0x800000, 0x3800080}, | ||
| 3717 | {0x3800000, 0x800000, 0x636d24, 0x800000, 0x3800080}, | ||
| 3718 | {0x3800000, 0x800000, 0x7fffff, 0x800000, 0x3800080}, | ||
| 3719 | {0x3800000, 0x800000, 0x800000, 0x1000000, 0x3800000}, | ||
| 3720 | {0x3800000, 0x800000, 0x800002, 0x1000001, 0x3800000}, | ||
| 3721 | {0x3800000, 0x800000, 0x1398437, 0x1798437, 0x3800000}, | ||
| 3722 | {0x3800000, 0x800000, 0xba98d27, 0xba98d29, 0x3800000}, | ||
| 3723 | {0x3800000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3800000}, | ||
| 3724 | {0x3800000, 0x800000, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 3725 | {0x3800000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 3726 | {0x3800000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 3727 | {0x3800000, 0x800000, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 3728 | {0x3800000, 0x800000, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 3729 | {0x3800000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 3730 | {0x3800000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 3731 | {0x3800000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 3732 | {0x3800000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3733 | {0x3800000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 3734 | {0x3800000, 0x800000, 0x80000000, 0x800000, 0x3800000}, | ||
| 3735 | {0x3800000, 0x800000, 0x80000001, 0x800000, 0x3800080}, | ||
| 3736 | {0x3800000, 0x800000, 0x80000076, 0x800000, 0x3800080}, | ||
| 3737 | {0x3800000, 0x800000, 0x80002b94, 0x800000, 0x3800080}, | ||
| 3738 | {0x3800000, 0x800000, 0x80636d24, 0x800000, 0x3800080}, | ||
| 3739 | {0x3800000, 0x800000, 0x807fffff, 0x800000, 0x3800080}, | ||
| 3740 | {0x3800000, 0x800000, 0x80800000, 0x80000000, 0x3800000}, | ||
| 3741 | {0x3800000, 0x800000, 0x80800002, 0x0, 0x3800008}, | ||
| 3742 | {0x3800000, 0x800000, 0x81398437, 0x80f3086e, 0x3800000}, | ||
| 3743 | {0x3800000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3800000}, | ||
| 3744 | {0x3800000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3800000}, | ||
| 3745 | {0x3800000, 0x800000, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 3746 | {0x3800000, 0x800000, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 3747 | {0x3800000, 0x800000, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 3748 | {0x3800000, 0x800000, 0xff800000, 0xff800000, 0x3800000}, | ||
| 3749 | {0x3800000, 0x800000, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 3750 | {0x3800000, 0x800000, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 3751 | {0x3800000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 3752 | {0x3800000, 0x800000, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 3753 | {0x3800000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3754 | {0x3800000, 0x800000, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 3755 | {0x3800000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 3756 | {0x3800000, 0x800000, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 3757 | {0x3800000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 3758 | {0x3800000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 3759 | {0x3800000, 0x800000, 0x9503366, 0x95033a6, 0x3800000}, | ||
| 3760 | {0x3800000, 0x800000, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, | ||
| 3761 | {0x3800000, 0x800000, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 3762 | {0x3800000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 3763 | {0x3800000, 0x800000, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, | ||
| 3764 | {0x3800000, 0x800000, 0x966320b, 0x966324b, 0x3800000}, | ||
| 3765 | {0x3800000, 0x800000, 0xb26bddee, 0xb26bddee, 0x3800010}, | ||
| 3766 | {0x3800000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, | ||
| 3767 | {0x3800000, 0x800000, 0x317285d3, 0x317285d3, 0x3800010}, | ||
| 3768 | {0x3800000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3800010}, | ||
| 3769 | {0x3800000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 3770 | {0x3800000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 3771 | {0x3800000, 0x800002, 0x0, 0x800002, 0x3800000}, | ||
| 3772 | {0x3800000, 0x800002, 0x1, 0x800002, 0x3800080}, | ||
| 3773 | {0x3800000, 0x800002, 0x76, 0x800002, 0x3800080}, | ||
| 3774 | {0x3800000, 0x800002, 0x2b94, 0x800002, 0x3800080}, | ||
| 3775 | {0x3800000, 0x800002, 0x636d24, 0x800002, 0x3800080}, | ||
| 3776 | {0x3800000, 0x800002, 0x7fffff, 0x800002, 0x3800080}, | ||
| 3777 | {0x3800000, 0x800002, 0x800000, 0x1000001, 0x3800000}, | ||
| 3778 | {0x3800000, 0x800002, 0x800002, 0x1000002, 0x3800000}, | ||
| 3779 | {0x3800000, 0x800002, 0x1398437, 0x1798438, 0x3800000}, | ||
| 3780 | {0x3800000, 0x800002, 0xba98d27, 0xba98d29, 0x3800010}, | ||
| 3781 | {0x3800000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3800010}, | ||
| 3782 | {0x3800000, 0x800002, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 3783 | {0x3800000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 3784 | {0x3800000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 3785 | {0x3800000, 0x800002, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 3786 | {0x3800000, 0x800002, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 3787 | {0x3800000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 3788 | {0x3800000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 3789 | {0x3800000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 3790 | {0x3800000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3791 | {0x3800000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 3792 | {0x3800000, 0x800002, 0x80000000, 0x800002, 0x3800000}, | ||
| 3793 | {0x3800000, 0x800002, 0x80000001, 0x800002, 0x3800080}, | ||
| 3794 | {0x3800000, 0x800002, 0x80000076, 0x800002, 0x3800080}, | ||
| 3795 | {0x3800000, 0x800002, 0x80002b94, 0x800002, 0x3800080}, | ||
| 3796 | {0x3800000, 0x800002, 0x80636d24, 0x800002, 0x3800080}, | ||
| 3797 | {0x3800000, 0x800002, 0x807fffff, 0x800002, 0x3800080}, | ||
| 3798 | {0x3800000, 0x800002, 0x80800000, 0x0, 0x3800008}, | ||
| 3799 | {0x3800000, 0x800002, 0x80800002, 0x80000000, 0x3800000}, | ||
| 3800 | {0x3800000, 0x800002, 0x81398437, 0x80f3086c, 0x3800000}, | ||
| 3801 | {0x3800000, 0x800002, 0x8ba98d27, 0x8ba98d25, 0x3800010}, | ||
| 3802 | {0x3800000, 0x800002, 0x8ba98d7a, 0x8ba98d78, 0x3800010}, | ||
| 3803 | {0x3800000, 0x800002, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 3804 | {0x3800000, 0x800002, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 3805 | {0x3800000, 0x800002, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 3806 | {0x3800000, 0x800002, 0xff800000, 0xff800000, 0x3800000}, | ||
| 3807 | {0x3800000, 0x800002, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 3808 | {0x3800000, 0x800002, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 3809 | {0x3800000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 3810 | {0x3800000, 0x800002, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 3811 | {0x3800000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3812 | {0x3800000, 0x800002, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 3813 | {0x3800000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 3814 | {0x3800000, 0x800002, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 3815 | {0x3800000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 3816 | {0x3800000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 3817 | {0x3800000, 0x800002, 0x9503366, 0x95033a6, 0x3800010}, | ||
| 3818 | {0x3800000, 0x800002, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, | ||
| 3819 | {0x3800000, 0x800002, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 3820 | {0x3800000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 3821 | {0x3800000, 0x800002, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, | ||
| 3822 | {0x3800000, 0x800002, 0x966320b, 0x966324b, 0x3800010}, | ||
| 3823 | {0x3800000, 0x800002, 0xb26bddee, 0xb26bddee, 0x3800010}, | ||
| 3824 | {0x3800000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, | ||
| 3825 | {0x3800000, 0x800002, 0x317285d3, 0x317285d3, 0x3800010}, | ||
| 3826 | {0x3800000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3800010}, | ||
| 3827 | {0x3800000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 3828 | {0x3800000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 3829 | {0x3800000, 0x1398437, 0x0, 0x1398437, 0x3800000}, | ||
| 3830 | {0x3800000, 0x1398437, 0x1, 0x1398437, 0x3800080}, | ||
| 3831 | {0x3800000, 0x1398437, 0x76, 0x1398437, 0x3800080}, | ||
| 3832 | {0x3800000, 0x1398437, 0x2b94, 0x1398437, 0x3800080}, | ||
| 3833 | {0x3800000, 0x1398437, 0x636d24, 0x1398437, 0x3800080}, | ||
| 3834 | {0x3800000, 0x1398437, 0x7fffff, 0x1398437, 0x3800080}, | ||
| 3835 | {0x3800000, 0x1398437, 0x800000, 0x1798437, 0x3800000}, | ||
| 3836 | {0x3800000, 0x1398437, 0x800002, 0x1798438, 0x3800000}, | ||
| 3837 | {0x3800000, 0x1398437, 0x1398437, 0x1b98437, 0x3800000}, | ||
| 3838 | {0x3800000, 0x1398437, 0xba98d27, 0xba98d2c, 0x3800010}, | ||
| 3839 | {0x3800000, 0x1398437, 0xba98d7a, 0xba98d7f, 0x3800010}, | ||
| 3840 | {0x3800000, 0x1398437, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 3841 | {0x3800000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 3842 | {0x3800000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 3843 | {0x3800000, 0x1398437, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 3844 | {0x3800000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 3845 | {0x3800000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 3846 | {0x3800000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 3847 | {0x3800000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 3848 | {0x3800000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3849 | {0x3800000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 3850 | {0x3800000, 0x1398437, 0x80000000, 0x1398437, 0x3800000}, | ||
| 3851 | {0x3800000, 0x1398437, 0x80000001, 0x1398437, 0x3800080}, | ||
| 3852 | {0x3800000, 0x1398437, 0x80000076, 0x1398437, 0x3800080}, | ||
| 3853 | {0x3800000, 0x1398437, 0x80002b94, 0x1398437, 0x3800080}, | ||
| 3854 | {0x3800000, 0x1398437, 0x80636d24, 0x1398437, 0x3800080}, | ||
| 3855 | {0x3800000, 0x1398437, 0x807fffff, 0x1398437, 0x3800080}, | ||
| 3856 | {0x3800000, 0x1398437, 0x80800000, 0xf3086e, 0x3800000}, | ||
| 3857 | {0x3800000, 0x1398437, 0x80800002, 0xf3086c, 0x3800000}, | ||
| 3858 | {0x3800000, 0x1398437, 0x81398437, 0x80000000, 0x3800000}, | ||
| 3859 | {0x3800000, 0x1398437, 0x8ba98d27, 0x8ba98d22, 0x3800010}, | ||
| 3860 | {0x3800000, 0x1398437, 0x8ba98d7a, 0x8ba98d75, 0x3800010}, | ||
| 3861 | {0x3800000, 0x1398437, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 3862 | {0x3800000, 0x1398437, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 3863 | {0x3800000, 0x1398437, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 3864 | {0x3800000, 0x1398437, 0xff800000, 0xff800000, 0x3800000}, | ||
| 3865 | {0x3800000, 0x1398437, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 3866 | {0x3800000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 3867 | {0x3800000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 3868 | {0x3800000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 3869 | {0x3800000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3870 | {0x3800000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 3871 | {0x3800000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 3872 | {0x3800000, 0x1398437, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 3873 | {0x3800000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 3874 | {0x3800000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 3875 | {0x3800000, 0x1398437, 0x9503366, 0x950341f, 0x3800010}, | ||
| 3876 | {0x3800000, 0x1398437, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, | ||
| 3877 | {0x3800000, 0x1398437, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 3878 | {0x3800000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 3879 | {0x3800000, 0x1398437, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, | ||
| 3880 | {0x3800000, 0x1398437, 0x966320b, 0x96632c4, 0x3800010}, | ||
| 3881 | {0x3800000, 0x1398437, 0xb26bddee, 0xb26bddee, 0x3800010}, | ||
| 3882 | {0x3800000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, | ||
| 3883 | {0x3800000, 0x1398437, 0x317285d3, 0x317285d3, 0x3800010}, | ||
| 3884 | {0x3800000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3800010}, | ||
| 3885 | {0x3800000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 3886 | {0x3800000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 3887 | {0x3800000, 0xba98d27, 0x0, 0xba98d27, 0x3800000}, | ||
| 3888 | {0x3800000, 0xba98d27, 0x1, 0xba98d27, 0x3800080}, | ||
| 3889 | {0x3800000, 0xba98d27, 0x76, 0xba98d27, 0x3800080}, | ||
| 3890 | {0x3800000, 0xba98d27, 0x2b94, 0xba98d27, 0x3800080}, | ||
| 3891 | {0x3800000, 0xba98d27, 0x636d24, 0xba98d27, 0x3800080}, | ||
| 3892 | {0x3800000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3800080}, | ||
| 3893 | {0x3800000, 0xba98d27, 0x800000, 0xba98d29, 0x3800000}, | ||
| 3894 | {0x3800000, 0xba98d27, 0x800002, 0xba98d29, 0x3800010}, | ||
| 3895 | {0x3800000, 0xba98d27, 0x1398437, 0xba98d2c, 0x3800010}, | ||
| 3896 | {0x3800000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3800000}, | ||
| 3897 | {0x3800000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3800010}, | ||
| 3898 | {0x3800000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 3899 | {0x3800000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 3900 | {0x3800000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 3901 | {0x3800000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 3902 | {0x3800000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 3903 | {0x3800000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 3904 | {0x3800000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 3905 | {0x3800000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 3906 | {0x3800000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3907 | {0x3800000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 3908 | {0x3800000, 0xba98d27, 0x80000000, 0xba98d27, 0x3800000}, | ||
| 3909 | {0x3800000, 0xba98d27, 0x80000001, 0xba98d27, 0x3800080}, | ||
| 3910 | {0x3800000, 0xba98d27, 0x80000076, 0xba98d27, 0x3800080}, | ||
| 3911 | {0x3800000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3800080}, | ||
| 3912 | {0x3800000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3800080}, | ||
| 3913 | {0x3800000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3800080}, | ||
| 3914 | {0x3800000, 0xba98d27, 0x80800000, 0xba98d25, 0x3800000}, | ||
| 3915 | {0x3800000, 0xba98d27, 0x80800002, 0xba98d24, 0x3800010}, | ||
| 3916 | {0x3800000, 0xba98d27, 0x81398437, 0xba98d21, 0x3800010}, | ||
| 3917 | {0x3800000, 0xba98d27, 0x8ba98d27, 0x80000000, 0x3800000}, | ||
| 3918 | {0x3800000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3800000}, | ||
| 3919 | {0x3800000, 0xba98d27, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 3920 | {0x3800000, 0xba98d27, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 3921 | {0x3800000, 0xba98d27, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 3922 | {0x3800000, 0xba98d27, 0xff800000, 0xff800000, 0x3800000}, | ||
| 3923 | {0x3800000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 3924 | {0x3800000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 3925 | {0x3800000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 3926 | {0x3800000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 3927 | {0x3800000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3928 | {0x3800000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 3929 | {0x3800000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 3930 | {0x3800000, 0xba98d27, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 3931 | {0x3800000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 3932 | {0x3800000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 3933 | {0x3800000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3800010}, | ||
| 3934 | {0x3800000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, | ||
| 3935 | {0x3800000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 3936 | {0x3800000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 3937 | {0x3800000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, | ||
| 3938 | {0x3800000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3800010}, | ||
| 3939 | {0x3800000, 0xba98d27, 0xb26bddee, 0xb26bddee, 0x3800010}, | ||
| 3940 | {0x3800000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, | ||
| 3941 | {0x3800000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3800010}, | ||
| 3942 | {0x3800000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3800010}, | ||
| 3943 | {0x3800000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 3944 | {0x3800000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 3945 | {0x3800000, 0xba98d7a, 0x0, 0xba98d7a, 0x3800000}, | ||
| 3946 | {0x3800000, 0xba98d7a, 0x1, 0xba98d7a, 0x3800080}, | ||
| 3947 | {0x3800000, 0xba98d7a, 0x76, 0xba98d7a, 0x3800080}, | ||
| 3948 | {0x3800000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3800080}, | ||
| 3949 | {0x3800000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3800080}, | ||
| 3950 | {0x3800000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3800080}, | ||
| 3951 | {0x3800000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3800000}, | ||
| 3952 | {0x3800000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3800010}, | ||
| 3953 | {0x3800000, 0xba98d7a, 0x1398437, 0xba98d7f, 0x3800010}, | ||
| 3954 | {0x3800000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3800010}, | ||
| 3955 | {0x3800000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3800000}, | ||
| 3956 | {0x3800000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 3957 | {0x3800000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 3958 | {0x3800000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 3959 | {0x3800000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 3960 | {0x3800000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 3961 | {0x3800000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 3962 | {0x3800000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 3963 | {0x3800000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 3964 | {0x3800000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3965 | {0x3800000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 3966 | {0x3800000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3800000}, | ||
| 3967 | {0x3800000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3800080}, | ||
| 3968 | {0x3800000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3800080}, | ||
| 3969 | {0x3800000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3800080}, | ||
| 3970 | {0x3800000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3800080}, | ||
| 3971 | {0x3800000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3800080}, | ||
| 3972 | {0x3800000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3800000}, | ||
| 3973 | {0x3800000, 0xba98d7a, 0x80800002, 0xba98d77, 0x3800010}, | ||
| 3974 | {0x3800000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3800010}, | ||
| 3975 | {0x3800000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3800000}, | ||
| 3976 | {0x3800000, 0xba98d7a, 0x8ba98d7a, 0x80000000, 0x3800000}, | ||
| 3977 | {0x3800000, 0xba98d7a, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 3978 | {0x3800000, 0xba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 3979 | {0x3800000, 0xba98d7a, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 3980 | {0x3800000, 0xba98d7a, 0xff800000, 0xff800000, 0x3800000}, | ||
| 3981 | {0x3800000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 3982 | {0x3800000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 3983 | {0x3800000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 3984 | {0x3800000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 3985 | {0x3800000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 3986 | {0x3800000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 3987 | {0x3800000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 3988 | {0x3800000, 0xba98d7a, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 3989 | {0x3800000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 3990 | {0x3800000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 3991 | {0x3800000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3800010}, | ||
| 3992 | {0x3800000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, | ||
| 3993 | {0x3800000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 3994 | {0x3800000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 3995 | {0x3800000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, | ||
| 3996 | {0x3800000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3800010}, | ||
| 3997 | {0x3800000, 0xba98d7a, 0xb26bddee, 0xb26bddee, 0x3800010}, | ||
| 3998 | {0x3800000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, | ||
| 3999 | {0x3800000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3800010}, | ||
| 4000 | {0x3800000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3800010}, | ||
| 4001 | {0x3800000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 4002 | {0x3800000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 4003 | {0x3800000, 0x751f853a, 0x0, 0x751f853a, 0x3800000}, | ||
| 4004 | {0x3800000, 0x751f853a, 0x1, 0x751f853a, 0x3800080}, | ||
| 4005 | {0x3800000, 0x751f853a, 0x76, 0x751f853a, 0x3800080}, | ||
| 4006 | {0x3800000, 0x751f853a, 0x2b94, 0x751f853a, 0x3800080}, | ||
| 4007 | {0x3800000, 0x751f853a, 0x636d24, 0x751f853a, 0x3800080}, | ||
| 4008 | {0x3800000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3800080}, | ||
| 4009 | {0x3800000, 0x751f853a, 0x800000, 0x751f853a, 0x3800010}, | ||
| 4010 | {0x3800000, 0x751f853a, 0x800002, 0x751f853a, 0x3800010}, | ||
| 4011 | {0x3800000, 0x751f853a, 0x1398437, 0x751f853a, 0x3800010}, | ||
| 4012 | {0x3800000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3800010}, | ||
| 4013 | {0x3800000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3800010}, | ||
| 4014 | {0x3800000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3800000}, | ||
| 4015 | {0x3800000, 0x751f853a, 0x7f7ffff0, 0x7f7ffff9, 0x3800010}, | ||
| 4016 | {0x3800000, 0x751f853a, 0x7f7fffff, 0x7f7fffff, 0x3800014}, | ||
| 4017 | {0x3800000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 4018 | {0x3800000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4019 | {0x3800000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4020 | {0x3800000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4021 | {0x3800000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4022 | {0x3800000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4023 | {0x3800000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4024 | {0x3800000, 0x751f853a, 0x80000000, 0x751f853a, 0x3800000}, | ||
| 4025 | {0x3800000, 0x751f853a, 0x80000001, 0x751f853a, 0x3800080}, | ||
| 4026 | {0x3800000, 0x751f853a, 0x80000076, 0x751f853a, 0x3800080}, | ||
| 4027 | {0x3800000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3800080}, | ||
| 4028 | {0x3800000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3800080}, | ||
| 4029 | {0x3800000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3800080}, | ||
| 4030 | {0x3800000, 0x751f853a, 0x80800000, 0x751f8539, 0x3800010}, | ||
| 4031 | {0x3800000, 0x751f853a, 0x80800002, 0x751f8539, 0x3800010}, | ||
| 4032 | {0x3800000, 0x751f853a, 0x81398437, 0x751f8539, 0x3800010}, | ||
| 4033 | {0x3800000, 0x751f853a, 0x8ba98d27, 0x751f8539, 0x3800010}, | ||
| 4034 | {0x3800000, 0x751f853a, 0x8ba98d7a, 0x751f8539, 0x3800010}, | ||
| 4035 | {0x3800000, 0x751f853a, 0xf51f853a, 0x80000000, 0x3800000}, | ||
| 4036 | {0x3800000, 0x751f853a, 0xff7ffff0, 0xff7fffe7, 0x3800010}, | ||
| 4037 | {0x3800000, 0x751f853a, 0xff7fffff, 0xff7ffff6, 0x3800010}, | ||
| 4038 | {0x3800000, 0x751f853a, 0xff800000, 0xff800000, 0x3800000}, | ||
| 4039 | {0x3800000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4040 | {0x3800000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4041 | {0x3800000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4042 | {0x3800000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4043 | {0x3800000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4044 | {0x3800000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4045 | {0x3800000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3800010}, | ||
| 4046 | {0x3800000, 0x751f853a, 0xe73a5134, 0x751f8539, 0x3800010}, | ||
| 4047 | {0x3800000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3800010}, | ||
| 4048 | {0x3800000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3800010}, | ||
| 4049 | {0x3800000, 0x751f853a, 0x9503366, 0x751f853a, 0x3800010}, | ||
| 4050 | {0x3800000, 0x751f853a, 0xbf5a97c9, 0x751f8539, 0x3800010}, | ||
| 4051 | {0x3800000, 0x751f853a, 0xe6ff1a14, 0x751f8539, 0x3800010}, | ||
| 4052 | {0x3800000, 0x751f853a, 0x77f31e2f, 0x77f81a58, 0x3800010}, | ||
| 4053 | {0x3800000, 0x751f853a, 0xaab4d7d8, 0x751f8539, 0x3800010}, | ||
| 4054 | {0x3800000, 0x751f853a, 0x966320b, 0x751f853a, 0x3800010}, | ||
| 4055 | {0x3800000, 0x751f853a, 0xb26bddee, 0x751f8539, 0x3800010}, | ||
| 4056 | {0x3800000, 0x751f853a, 0xb5c8e5d3, 0x751f8539, 0x3800010}, | ||
| 4057 | {0x3800000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3800010}, | ||
| 4058 | {0x3800000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3800010}, | ||
| 4059 | {0x3800000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3800010}, | ||
| 4060 | {0x3800000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3800010}, | ||
| 4061 | {0x3800000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3800000}, | ||
| 4062 | {0x3800000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3800080}, | ||
| 4063 | {0x3800000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3800080}, | ||
| 4064 | {0x3800000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3800080}, | ||
| 4065 | {0x3800000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3800080}, | ||
| 4066 | {0x3800000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3800080}, | ||
| 4067 | {0x3800000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3800010}, | ||
| 4068 | {0x3800000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3800010}, | ||
| 4069 | {0x3800000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3800010}, | ||
| 4070 | {0x3800000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3800010}, | ||
| 4071 | {0x3800000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3800010}, | ||
| 4072 | {0x3800000, 0x7f7ffff0, 0x751f853a, 0x7f7ffff9, 0x3800010}, | ||
| 4073 | {0x3800000, 0x7f7ffff0, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, | ||
| 4074 | {0x3800000, 0x7f7ffff0, 0x7f7fffff, 0x7f7fffff, 0x3800014}, | ||
| 4075 | {0x3800000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 4076 | {0x3800000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4077 | {0x3800000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4078 | {0x3800000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4079 | {0x3800000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4080 | {0x3800000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4081 | {0x3800000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4082 | {0x3800000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3800000}, | ||
| 4083 | {0x3800000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3800080}, | ||
| 4084 | {0x3800000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3800080}, | ||
| 4085 | {0x3800000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3800080}, | ||
| 4086 | {0x3800000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3800080}, | ||
| 4087 | {0x3800000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3800080}, | ||
| 4088 | {0x3800000, 0x7f7ffff0, 0x80800000, 0x7f7fffef, 0x3800010}, | ||
| 4089 | {0x3800000, 0x7f7ffff0, 0x80800002, 0x7f7fffef, 0x3800010}, | ||
| 4090 | {0x3800000, 0x7f7ffff0, 0x81398437, 0x7f7fffef, 0x3800010}, | ||
| 4091 | {0x3800000, 0x7f7ffff0, 0x8ba98d27, 0x7f7fffef, 0x3800010}, | ||
| 4092 | {0x3800000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7fffef, 0x3800010}, | ||
| 4093 | {0x3800000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3800010}, | ||
| 4094 | {0x3800000, 0x7f7ffff0, 0xff7ffff0, 0x80000000, 0x3800000}, | ||
| 4095 | {0x3800000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3800000}, | ||
| 4096 | {0x3800000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3800000}, | ||
| 4097 | {0x3800000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4098 | {0x3800000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4099 | {0x3800000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4100 | {0x3800000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4101 | {0x3800000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4102 | {0x3800000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4103 | {0x3800000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3800010}, | ||
| 4104 | {0x3800000, 0x7f7ffff0, 0xe73a5134, 0x7f7fffef, 0x3800010}, | ||
| 4105 | {0x3800000, 0x7f7ffff0, 0x7c994e9e, 0x7f7fffff, 0x3800014}, | ||
| 4106 | {0x3800000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3800010}, | ||
| 4107 | {0x3800000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3800010}, | ||
| 4108 | {0x3800000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7fffef, 0x3800010}, | ||
| 4109 | {0x3800000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7fffef, 0x3800010}, | ||
| 4110 | {0x3800000, 0x7f7ffff0, 0x77f31e2f, 0x7f7fffff, 0x3800014}, | ||
| 4111 | {0x3800000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7fffef, 0x3800010}, | ||
| 4112 | {0x3800000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3800010}, | ||
| 4113 | {0x3800000, 0x7f7ffff0, 0xb26bddee, 0x7f7fffef, 0x3800010}, | ||
| 4114 | {0x3800000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7fffef, 0x3800010}, | ||
| 4115 | {0x3800000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3800010}, | ||
| 4116 | {0x3800000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3800010}, | ||
| 4117 | {0x3800000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3800010}, | ||
| 4118 | {0x3800000, 0x7f7ffff0, 0x7b906a6c, 0x7f7fffff, 0x3800014}, | ||
| 4119 | {0x3800000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3800000}, | ||
| 4120 | {0x3800000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3800080}, | ||
| 4121 | {0x3800000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3800080}, | ||
| 4122 | {0x3800000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3800080}, | ||
| 4123 | {0x3800000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3800080}, | ||
| 4124 | {0x3800000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3800080}, | ||
| 4125 | {0x3800000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3800010}, | ||
| 4126 | {0x3800000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3800010}, | ||
| 4127 | {0x3800000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3800010}, | ||
| 4128 | {0x3800000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3800010}, | ||
| 4129 | {0x3800000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3800010}, | ||
| 4130 | {0x3800000, 0x7f7fffff, 0x751f853a, 0x7f7fffff, 0x3800014}, | ||
| 4131 | {0x3800000, 0x7f7fffff, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, | ||
| 4132 | {0x3800000, 0x7f7fffff, 0x7f7fffff, 0x7f7fffff, 0x3800014}, | ||
| 4133 | {0x3800000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 4134 | {0x3800000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4135 | {0x3800000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4136 | {0x3800000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4137 | {0x3800000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4138 | {0x3800000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4139 | {0x3800000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4140 | {0x3800000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3800000}, | ||
| 4141 | {0x3800000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3800080}, | ||
| 4142 | {0x3800000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3800080}, | ||
| 4143 | {0x3800000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3800080}, | ||
| 4144 | {0x3800000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3800080}, | ||
| 4145 | {0x3800000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3800080}, | ||
| 4146 | {0x3800000, 0x7f7fffff, 0x80800000, 0x7f7ffffe, 0x3800010}, | ||
| 4147 | {0x3800000, 0x7f7fffff, 0x80800002, 0x7f7ffffe, 0x3800010}, | ||
| 4148 | {0x3800000, 0x7f7fffff, 0x81398437, 0x7f7ffffe, 0x3800010}, | ||
| 4149 | {0x3800000, 0x7f7fffff, 0x8ba98d27, 0x7f7ffffe, 0x3800010}, | ||
| 4150 | {0x3800000, 0x7f7fffff, 0x8ba98d7a, 0x7f7ffffe, 0x3800010}, | ||
| 4151 | {0x3800000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3800010}, | ||
| 4152 | {0x3800000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3800000}, | ||
| 4153 | {0x3800000, 0x7f7fffff, 0xff7fffff, 0x80000000, 0x3800000}, | ||
| 4154 | {0x3800000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3800000}, | ||
| 4155 | {0x3800000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4156 | {0x3800000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4157 | {0x3800000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4158 | {0x3800000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4159 | {0x3800000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4160 | {0x3800000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4161 | {0x3800000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3800010}, | ||
| 4162 | {0x3800000, 0x7f7fffff, 0xe73a5134, 0x7f7ffffe, 0x3800010}, | ||
| 4163 | {0x3800000, 0x7f7fffff, 0x7c994e9e, 0x7f7fffff, 0x3800014}, | ||
| 4164 | {0x3800000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3800010}, | ||
| 4165 | {0x3800000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3800010}, | ||
| 4166 | {0x3800000, 0x7f7fffff, 0xbf5a97c9, 0x7f7ffffe, 0x3800010}, | ||
| 4167 | {0x3800000, 0x7f7fffff, 0xe6ff1a14, 0x7f7ffffe, 0x3800010}, | ||
| 4168 | {0x3800000, 0x7f7fffff, 0x77f31e2f, 0x7f7fffff, 0x3800014}, | ||
| 4169 | {0x3800000, 0x7f7fffff, 0xaab4d7d8, 0x7f7ffffe, 0x3800010}, | ||
| 4170 | {0x3800000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3800010}, | ||
| 4171 | {0x3800000, 0x7f7fffff, 0xb26bddee, 0x7f7ffffe, 0x3800010}, | ||
| 4172 | {0x3800000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7ffffe, 0x3800010}, | ||
| 4173 | {0x3800000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3800010}, | ||
| 4174 | {0x3800000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3800010}, | ||
| 4175 | {0x3800000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3800010}, | ||
| 4176 | {0x3800000, 0x7f7fffff, 0x7b906a6c, 0x7f7fffff, 0x3800014}, | ||
| 4177 | {0x3800000, 0x7f800000, 0x0, 0x7f800000, 0x3800000}, | ||
| 4178 | {0x3800000, 0x7f800000, 0x1, 0x7f800000, 0x3800080}, | ||
| 4179 | {0x3800000, 0x7f800000, 0x76, 0x7f800000, 0x3800080}, | ||
| 4180 | {0x3800000, 0x7f800000, 0x2b94, 0x7f800000, 0x3800080}, | ||
| 4181 | {0x3800000, 0x7f800000, 0x636d24, 0x7f800000, 0x3800080}, | ||
| 4182 | {0x3800000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3800080}, | ||
| 4183 | {0x3800000, 0x7f800000, 0x800000, 0x7f800000, 0x3800000}, | ||
| 4184 | {0x3800000, 0x7f800000, 0x800002, 0x7f800000, 0x3800000}, | ||
| 4185 | {0x3800000, 0x7f800000, 0x1398437, 0x7f800000, 0x3800000}, | ||
| 4186 | {0x3800000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3800000}, | ||
| 4187 | {0x3800000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3800000}, | ||
| 4188 | {0x3800000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3800000}, | ||
| 4189 | {0x3800000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3800000}, | ||
| 4190 | {0x3800000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3800000}, | ||
| 4191 | {0x3800000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 4192 | {0x3800000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4193 | {0x3800000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4194 | {0x3800000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4195 | {0x3800000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4196 | {0x3800000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4197 | {0x3800000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4198 | {0x3800000, 0x7f800000, 0x80000000, 0x7f800000, 0x3800000}, | ||
| 4199 | {0x3800000, 0x7f800000, 0x80000001, 0x7f800000, 0x3800080}, | ||
| 4200 | {0x3800000, 0x7f800000, 0x80000076, 0x7f800000, 0x3800080}, | ||
| 4201 | {0x3800000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3800080}, | ||
| 4202 | {0x3800000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3800080}, | ||
| 4203 | {0x3800000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3800080}, | ||
| 4204 | {0x3800000, 0x7f800000, 0x80800000, 0x7f800000, 0x3800000}, | ||
| 4205 | {0x3800000, 0x7f800000, 0x80800002, 0x7f800000, 0x3800000}, | ||
| 4206 | {0x3800000, 0x7f800000, 0x81398437, 0x7f800000, 0x3800000}, | ||
| 4207 | {0x3800000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3800000}, | ||
| 4208 | {0x3800000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3800000}, | ||
| 4209 | {0x3800000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3800000}, | ||
| 4210 | {0x3800000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3800000}, | ||
| 4211 | {0x3800000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3800000}, | ||
| 4212 | {0x3800000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3800001}, | ||
| 4213 | {0x3800000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4214 | {0x3800000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4215 | {0x3800000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4216 | {0x3800000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4217 | {0x3800000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4218 | {0x3800000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4219 | {0x3800000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3800000}, | ||
| 4220 | {0x3800000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3800000}, | ||
| 4221 | {0x3800000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3800000}, | ||
| 4222 | {0x3800000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3800000}, | ||
| 4223 | {0x3800000, 0x7f800000, 0x9503366, 0x7f800000, 0x3800000}, | ||
| 4224 | {0x3800000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3800000}, | ||
| 4225 | {0x3800000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3800000}, | ||
| 4226 | {0x3800000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3800000}, | ||
| 4227 | {0x3800000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3800000}, | ||
| 4228 | {0x3800000, 0x7f800000, 0x966320b, 0x7f800000, 0x3800000}, | ||
| 4229 | {0x3800000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3800000}, | ||
| 4230 | {0x3800000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3800000}, | ||
| 4231 | {0x3800000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3800000}, | ||
| 4232 | {0x3800000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3800000}, | ||
| 4233 | {0x3800000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3800000}, | ||
| 4234 | {0x3800000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3800000}, | ||
| 4235 | {0x3800000, 0x7f800001, 0x0, 0x7fc00000, 0x3800001}, | ||
| 4236 | {0x3800000, 0x7f800001, 0x1, 0x7fc00000, 0x3800081}, | ||
| 4237 | {0x3800000, 0x7f800001, 0x76, 0x7fc00000, 0x3800081}, | ||
| 4238 | {0x3800000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3800081}, | ||
| 4239 | {0x3800000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3800081}, | ||
| 4240 | {0x3800000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3800081}, | ||
| 4241 | {0x3800000, 0x7f800001, 0x800000, 0x7fc00000, 0x3800001}, | ||
| 4242 | {0x3800000, 0x7f800001, 0x800002, 0x7fc00000, 0x3800001}, | ||
| 4243 | {0x3800000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3800001}, | ||
| 4244 | {0x3800000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3800001}, | ||
| 4245 | {0x3800000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3800001}, | ||
| 4246 | {0x3800000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3800001}, | ||
| 4247 | {0x3800000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3800001}, | ||
| 4248 | {0x3800000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3800001}, | ||
| 4249 | {0x3800000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3800001}, | ||
| 4250 | {0x3800000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4251 | {0x3800000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4252 | {0x3800000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4253 | {0x3800000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3800001}, | ||
| 4254 | {0x3800000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3800001}, | ||
| 4255 | {0x3800000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3800001}, | ||
| 4256 | {0x3800000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3800001}, | ||
| 4257 | {0x3800000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3800081}, | ||
| 4258 | {0x3800000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3800081}, | ||
| 4259 | {0x3800000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3800081}, | ||
| 4260 | {0x3800000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3800081}, | ||
| 4261 | {0x3800000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3800081}, | ||
| 4262 | {0x3800000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3800001}, | ||
| 4263 | {0x3800000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3800001}, | ||
| 4264 | {0x3800000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3800001}, | ||
| 4265 | {0x3800000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3800001}, | ||
| 4266 | {0x3800000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3800001}, | ||
| 4267 | {0x3800000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3800001}, | ||
| 4268 | {0x3800000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3800001}, | ||
| 4269 | {0x3800000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3800001}, | ||
| 4270 | {0x3800000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3800001}, | ||
| 4271 | {0x3800000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4272 | {0x3800000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4273 | {0x3800000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4274 | {0x3800000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3800001}, | ||
| 4275 | {0x3800000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3800001}, | ||
| 4276 | {0x3800000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3800001}, | ||
| 4277 | {0x3800000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3800001}, | ||
| 4278 | {0x3800000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3800001}, | ||
| 4279 | {0x3800000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3800001}, | ||
| 4280 | {0x3800000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3800001}, | ||
| 4281 | {0x3800000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3800001}, | ||
| 4282 | {0x3800000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3800001}, | ||
| 4283 | {0x3800000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3800001}, | ||
| 4284 | {0x3800000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3800001}, | ||
| 4285 | {0x3800000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3800001}, | ||
| 4286 | {0x3800000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3800001}, | ||
| 4287 | {0x3800000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3800001}, | ||
| 4288 | {0x3800000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, | ||
| 4289 | {0x3800000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3800001}, | ||
| 4290 | {0x3800000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3800001}, | ||
| 4291 | {0x3800000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3800001}, | ||
| 4292 | {0x3800000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3800001}, | ||
| 4293 | {0x3800000, 0x7f984a37, 0x0, 0x7fc00000, 0x3800001}, | ||
| 4294 | {0x3800000, 0x7f984a37, 0x1, 0x7fc00000, 0x3800081}, | ||
| 4295 | {0x3800000, 0x7f984a37, 0x76, 0x7fc00000, 0x3800081}, | ||
| 4296 | {0x3800000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3800081}, | ||
| 4297 | {0x3800000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3800081}, | ||
| 4298 | {0x3800000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3800081}, | ||
| 4299 | {0x3800000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3800001}, | ||
| 4300 | {0x3800000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3800001}, | ||
| 4301 | {0x3800000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3800001}, | ||
| 4302 | {0x3800000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3800001}, | ||
| 4303 | {0x3800000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3800001}, | ||
| 4304 | {0x3800000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3800001}, | ||
| 4305 | {0x3800000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3800001}, | ||
| 4306 | {0x3800000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3800001}, | ||
| 4307 | {0x3800000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3800001}, | ||
| 4308 | {0x3800000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4309 | {0x3800000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4310 | {0x3800000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4311 | {0x3800000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3800001}, | ||
| 4312 | {0x3800000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3800001}, | ||
| 4313 | {0x3800000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3800001}, | ||
| 4314 | {0x3800000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3800001}, | ||
| 4315 | {0x3800000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3800081}, | ||
| 4316 | {0x3800000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3800081}, | ||
| 4317 | {0x3800000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3800081}, | ||
| 4318 | {0x3800000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3800081}, | ||
| 4319 | {0x3800000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3800081}, | ||
| 4320 | {0x3800000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3800001}, | ||
| 4321 | {0x3800000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3800001}, | ||
| 4322 | {0x3800000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3800001}, | ||
| 4323 | {0x3800000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3800001}, | ||
| 4324 | {0x3800000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3800001}, | ||
| 4325 | {0x3800000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3800001}, | ||
| 4326 | {0x3800000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3800001}, | ||
| 4327 | {0x3800000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3800001}, | ||
| 4328 | {0x3800000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3800001}, | ||
| 4329 | {0x3800000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4330 | {0x3800000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4331 | {0x3800000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4332 | {0x3800000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3800001}, | ||
| 4333 | {0x3800000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3800001}, | ||
| 4334 | {0x3800000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3800001}, | ||
| 4335 | {0x3800000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3800001}, | ||
| 4336 | {0x3800000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3800001}, | ||
| 4337 | {0x3800000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3800001}, | ||
| 4338 | {0x3800000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3800001}, | ||
| 4339 | {0x3800000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3800001}, | ||
| 4340 | {0x3800000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3800001}, | ||
| 4341 | {0x3800000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3800001}, | ||
| 4342 | {0x3800000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3800001}, | ||
| 4343 | {0x3800000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3800001}, | ||
| 4344 | {0x3800000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3800001}, | ||
| 4345 | {0x3800000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3800001}, | ||
| 4346 | {0x3800000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, | ||
| 4347 | {0x3800000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3800001}, | ||
| 4348 | {0x3800000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3800001}, | ||
| 4349 | {0x3800000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3800001}, | ||
| 4350 | {0x3800000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3800001}, | ||
| 4351 | {0x3800000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3800001}, | ||
| 4352 | {0x3800000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3800081}, | ||
| 4353 | {0x3800000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3800081}, | ||
| 4354 | {0x3800000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3800081}, | ||
| 4355 | {0x3800000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3800081}, | ||
| 4356 | {0x3800000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3800081}, | ||
| 4357 | {0x3800000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3800001}, | ||
| 4358 | {0x3800000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3800001}, | ||
| 4359 | {0x3800000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3800001}, | ||
| 4360 | {0x3800000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3800001}, | ||
| 4361 | {0x3800000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3800001}, | ||
| 4362 | {0x3800000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3800001}, | ||
| 4363 | {0x3800000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3800001}, | ||
| 4364 | {0x3800000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3800001}, | ||
| 4365 | {0x3800000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3800001}, | ||
| 4366 | {0x3800000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4367 | {0x3800000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4368 | {0x3800000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4369 | {0x3800000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3800001}, | ||
| 4370 | {0x3800000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3800001}, | ||
| 4371 | {0x3800000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3800001}, | ||
| 4372 | {0x3800000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3800001}, | ||
| 4373 | {0x3800000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3800081}, | ||
| 4374 | {0x3800000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3800081}, | ||
| 4375 | {0x3800000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3800081}, | ||
| 4376 | {0x3800000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3800081}, | ||
| 4377 | {0x3800000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3800081}, | ||
| 4378 | {0x3800000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3800001}, | ||
| 4379 | {0x3800000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3800001}, | ||
| 4380 | {0x3800000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3800001}, | ||
| 4381 | {0x3800000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3800001}, | ||
| 4382 | {0x3800000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3800001}, | ||
| 4383 | {0x3800000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3800001}, | ||
| 4384 | {0x3800000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3800001}, | ||
| 4385 | {0x3800000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3800001}, | ||
| 4386 | {0x3800000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3800001}, | ||
| 4387 | {0x3800000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4388 | {0x3800000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4389 | {0x3800000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4390 | {0x3800000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3800001}, | ||
| 4391 | {0x3800000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3800001}, | ||
| 4392 | {0x3800000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3800001}, | ||
| 4393 | {0x3800000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3800001}, | ||
| 4394 | {0x3800000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3800001}, | ||
| 4395 | {0x3800000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3800001}, | ||
| 4396 | {0x3800000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3800001}, | ||
| 4397 | {0x3800000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3800001}, | ||
| 4398 | {0x3800000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3800001}, | ||
| 4399 | {0x3800000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3800001}, | ||
| 4400 | {0x3800000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3800001}, | ||
| 4401 | {0x3800000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3800001}, | ||
| 4402 | {0x3800000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3800001}, | ||
| 4403 | {0x3800000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3800001}, | ||
| 4404 | {0x3800000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, | ||
| 4405 | {0x3800000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3800001}, | ||
| 4406 | {0x3800000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3800001}, | ||
| 4407 | {0x3800000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3800001}, | ||
| 4408 | {0x3800000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3800001}, | ||
| 4409 | {0x3800000, 0x7fc00000, 0x0, 0x7fc00000, 0x3800000}, | ||
| 4410 | {0x3800000, 0x7fc00000, 0x1, 0x7fc00000, 0x3800080}, | ||
| 4411 | {0x3800000, 0x7fc00000, 0x76, 0x7fc00000, 0x3800080}, | ||
| 4412 | {0x3800000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3800080}, | ||
| 4413 | {0x3800000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3800080}, | ||
| 4414 | {0x3800000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3800080}, | ||
| 4415 | {0x3800000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3800000}, | ||
| 4416 | {0x3800000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3800000}, | ||
| 4417 | {0x3800000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3800000}, | ||
| 4418 | {0x3800000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3800000}, | ||
| 4419 | {0x3800000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3800000}, | ||
| 4420 | {0x3800000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3800000}, | ||
| 4421 | {0x3800000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3800000}, | ||
| 4422 | {0x3800000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3800000}, | ||
| 4423 | {0x3800000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3800000}, | ||
| 4424 | {0x3800000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4425 | {0x3800000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4426 | {0x3800000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4427 | {0x3800000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4428 | {0x3800000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4429 | {0x3800000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4430 | {0x3800000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3800000}, | ||
| 4431 | {0x3800000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3800080}, | ||
| 4432 | {0x3800000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3800080}, | ||
| 4433 | {0x3800000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3800080}, | ||
| 4434 | {0x3800000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3800080}, | ||
| 4435 | {0x3800000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3800080}, | ||
| 4436 | {0x3800000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3800000}, | ||
| 4437 | {0x3800000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3800000}, | ||
| 4438 | {0x3800000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3800000}, | ||
| 4439 | {0x3800000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3800000}, | ||
| 4440 | {0x3800000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3800000}, | ||
| 4441 | {0x3800000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3800000}, | ||
| 4442 | {0x3800000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3800000}, | ||
| 4443 | {0x3800000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3800000}, | ||
| 4444 | {0x3800000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3800000}, | ||
| 4445 | {0x3800000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4446 | {0x3800000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4447 | {0x3800000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4448 | {0x3800000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4449 | {0x3800000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4450 | {0x3800000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4451 | {0x3800000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3800000}, | ||
| 4452 | {0x3800000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3800000}, | ||
| 4453 | {0x3800000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3800000}, | ||
| 4454 | {0x3800000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3800000}, | ||
| 4455 | {0x3800000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3800000}, | ||
| 4456 | {0x3800000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3800000}, | ||
| 4457 | {0x3800000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3800000}, | ||
| 4458 | {0x3800000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3800000}, | ||
| 4459 | {0x3800000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3800000}, | ||
| 4460 | {0x3800000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3800000}, | ||
| 4461 | {0x3800000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3800000}, | ||
| 4462 | {0x3800000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, | ||
| 4463 | {0x3800000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3800000}, | ||
| 4464 | {0x3800000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3800000}, | ||
| 4465 | {0x3800000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3800000}, | ||
| 4466 | {0x3800000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3800000}, | ||
| 4467 | {0x3800000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3800000}, | ||
| 4468 | {0x3800000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3800080}, | ||
| 4469 | {0x3800000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3800080}, | ||
| 4470 | {0x3800000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3800080}, | ||
| 4471 | {0x3800000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3800080}, | ||
| 4472 | {0x3800000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3800080}, | ||
| 4473 | {0x3800000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3800000}, | ||
| 4474 | {0x3800000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3800000}, | ||
| 4475 | {0x3800000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3800000}, | ||
| 4476 | {0x3800000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3800000}, | ||
| 4477 | {0x3800000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3800000}, | ||
| 4478 | {0x3800000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3800000}, | ||
| 4479 | {0x3800000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3800000}, | ||
| 4480 | {0x3800000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3800000}, | ||
| 4481 | {0x3800000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3800000}, | ||
| 4482 | {0x3800000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4483 | {0x3800000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4484 | {0x3800000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4485 | {0x3800000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4486 | {0x3800000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4487 | {0x3800000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4488 | {0x3800000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3800000}, | ||
| 4489 | {0x3800000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3800080}, | ||
| 4490 | {0x3800000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3800080}, | ||
| 4491 | {0x3800000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3800080}, | ||
| 4492 | {0x3800000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3800080}, | ||
| 4493 | {0x3800000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3800080}, | ||
| 4494 | {0x3800000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3800000}, | ||
| 4495 | {0x3800000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3800000}, | ||
| 4496 | {0x3800000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3800000}, | ||
| 4497 | {0x3800000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3800000}, | ||
| 4498 | {0x3800000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3800000}, | ||
| 4499 | {0x3800000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3800000}, | ||
| 4500 | {0x3800000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3800000}, | ||
| 4501 | {0x3800000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3800000}, | ||
| 4502 | {0x3800000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3800000}, | ||
| 4503 | {0x3800000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4504 | {0x3800000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4505 | {0x3800000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4506 | {0x3800000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4507 | {0x3800000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4508 | {0x3800000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4509 | {0x3800000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3800000}, | ||
| 4510 | {0x3800000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3800000}, | ||
| 4511 | {0x3800000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3800000}, | ||
| 4512 | {0x3800000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3800000}, | ||
| 4513 | {0x3800000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3800000}, | ||
| 4514 | {0x3800000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3800000}, | ||
| 4515 | {0x3800000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3800000}, | ||
| 4516 | {0x3800000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3800000}, | ||
| 4517 | {0x3800000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3800000}, | ||
| 4518 | {0x3800000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3800000}, | ||
| 4519 | {0x3800000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3800000}, | ||
| 4520 | {0x3800000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, | ||
| 4521 | {0x3800000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3800000}, | ||
| 4522 | {0x3800000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3800000}, | ||
| 4523 | {0x3800000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3800000}, | ||
| 4524 | {0x3800000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3800000}, | ||
| 4525 | {0x3800000, 0x7fffffff, 0x0, 0x7fc00000, 0x3800000}, | ||
| 4526 | {0x3800000, 0x7fffffff, 0x1, 0x7fc00000, 0x3800080}, | ||
| 4527 | {0x3800000, 0x7fffffff, 0x76, 0x7fc00000, 0x3800080}, | ||
| 4528 | {0x3800000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3800080}, | ||
| 4529 | {0x3800000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3800080}, | ||
| 4530 | {0x3800000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3800080}, | ||
| 4531 | {0x3800000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3800000}, | ||
| 4532 | {0x3800000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3800000}, | ||
| 4533 | {0x3800000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3800000}, | ||
| 4534 | {0x3800000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3800000}, | ||
| 4535 | {0x3800000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3800000}, | ||
| 4536 | {0x3800000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3800000}, | ||
| 4537 | {0x3800000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3800000}, | ||
| 4538 | {0x3800000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3800000}, | ||
| 4539 | {0x3800000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3800000}, | ||
| 4540 | {0x3800000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4541 | {0x3800000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4542 | {0x3800000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4543 | {0x3800000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4544 | {0x3800000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4545 | {0x3800000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4546 | {0x3800000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3800000}, | ||
| 4547 | {0x3800000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3800080}, | ||
| 4548 | {0x3800000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3800080}, | ||
| 4549 | {0x3800000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3800080}, | ||
| 4550 | {0x3800000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3800080}, | ||
| 4551 | {0x3800000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3800080}, | ||
| 4552 | {0x3800000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3800000}, | ||
| 4553 | {0x3800000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3800000}, | ||
| 4554 | {0x3800000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3800000}, | ||
| 4555 | {0x3800000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3800000}, | ||
| 4556 | {0x3800000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3800000}, | ||
| 4557 | {0x3800000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3800000}, | ||
| 4558 | {0x3800000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3800000}, | ||
| 4559 | {0x3800000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3800000}, | ||
| 4560 | {0x3800000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3800000}, | ||
| 4561 | {0x3800000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4562 | {0x3800000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4563 | {0x3800000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4564 | {0x3800000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4565 | {0x3800000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4566 | {0x3800000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4567 | {0x3800000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3800000}, | ||
| 4568 | {0x3800000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3800000}, | ||
| 4569 | {0x3800000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3800000}, | ||
| 4570 | {0x3800000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3800000}, | ||
| 4571 | {0x3800000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3800000}, | ||
| 4572 | {0x3800000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3800000}, | ||
| 4573 | {0x3800000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3800000}, | ||
| 4574 | {0x3800000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3800000}, | ||
| 4575 | {0x3800000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3800000}, | ||
| 4576 | {0x3800000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3800000}, | ||
| 4577 | {0x3800000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3800000}, | ||
| 4578 | {0x3800000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, | ||
| 4579 | {0x3800000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3800000}, | ||
| 4580 | {0x3800000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3800000}, | ||
| 4581 | {0x3800000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3800000}, | ||
| 4582 | {0x3800000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3800000}, | ||
| 4583 | {0x3800000, 0x80000000, 0x0, 0x80000000, 0x3800000}, | ||
| 4584 | {0x3800000, 0x80000000, 0x1, 0x80000000, 0x3800080}, | ||
| 4585 | {0x3800000, 0x80000000, 0x76, 0x80000000, 0x3800080}, | ||
| 4586 | {0x3800000, 0x80000000, 0x2b94, 0x80000000, 0x3800080}, | ||
| 4587 | {0x3800000, 0x80000000, 0x636d24, 0x80000000, 0x3800080}, | ||
| 4588 | {0x3800000, 0x80000000, 0x7fffff, 0x80000000, 0x3800080}, | ||
| 4589 | {0x3800000, 0x80000000, 0x800000, 0x800000, 0x3800000}, | ||
| 4590 | {0x3800000, 0x80000000, 0x800002, 0x800002, 0x3800000}, | ||
| 4591 | {0x3800000, 0x80000000, 0x1398437, 0x1398437, 0x3800000}, | ||
| 4592 | {0x3800000, 0x80000000, 0xba98d27, 0xba98d27, 0x3800000}, | ||
| 4593 | {0x3800000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3800000}, | ||
| 4594 | {0x3800000, 0x80000000, 0x751f853a, 0x751f853a, 0x3800000}, | ||
| 4595 | {0x3800000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3800000}, | ||
| 4596 | {0x3800000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3800000}, | ||
| 4597 | {0x3800000, 0x80000000, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 4598 | {0x3800000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4599 | {0x3800000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4600 | {0x3800000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4601 | {0x3800000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4602 | {0x3800000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4603 | {0x3800000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4604 | {0x3800000, 0x80000000, 0x80000000, 0x80000000, 0x3800000}, | ||
| 4605 | {0x3800000, 0x80000000, 0x80000001, 0x80000000, 0x3800080}, | ||
| 4606 | {0x3800000, 0x80000000, 0x80000076, 0x80000000, 0x3800080}, | ||
| 4607 | {0x3800000, 0x80000000, 0x80002b94, 0x80000000, 0x3800080}, | ||
| 4608 | {0x3800000, 0x80000000, 0x80636d24, 0x80000000, 0x3800080}, | ||
| 4609 | {0x3800000, 0x80000000, 0x807fffff, 0x80000000, 0x3800080}, | ||
| 4610 | {0x3800000, 0x80000000, 0x80800000, 0x80800000, 0x3800000}, | ||
| 4611 | {0x3800000, 0x80000000, 0x80800002, 0x80800002, 0x3800000}, | ||
| 4612 | {0x3800000, 0x80000000, 0x81398437, 0x81398437, 0x3800000}, | ||
| 4613 | {0x3800000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3800000}, | ||
| 4614 | {0x3800000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3800000}, | ||
| 4615 | {0x3800000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3800000}, | ||
| 4616 | {0x3800000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3800000}, | ||
| 4617 | {0x3800000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3800000}, | ||
| 4618 | {0x3800000, 0x80000000, 0xff800000, 0xff800000, 0x3800000}, | ||
| 4619 | {0x3800000, 0x80000000, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4620 | {0x3800000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4621 | {0x3800000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4622 | {0x3800000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4623 | {0x3800000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4624 | {0x3800000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4625 | {0x3800000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3800000}, | ||
| 4626 | {0x3800000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3800000}, | ||
| 4627 | {0x3800000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3800000}, | ||
| 4628 | {0x3800000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3800000}, | ||
| 4629 | {0x3800000, 0x80000000, 0x9503366, 0x9503366, 0x3800000}, | ||
| 4630 | {0x3800000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3800000}, | ||
| 4631 | {0x3800000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3800000}, | ||
| 4632 | {0x3800000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3800000}, | ||
| 4633 | {0x3800000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3800000}, | ||
| 4634 | {0x3800000, 0x80000000, 0x966320b, 0x966320b, 0x3800000}, | ||
| 4635 | {0x3800000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3800000}, | ||
| 4636 | {0x3800000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800000}, | ||
| 4637 | {0x3800000, 0x80000000, 0x317285d3, 0x317285d3, 0x3800000}, | ||
| 4638 | {0x3800000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3800000}, | ||
| 4639 | {0x3800000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3800000}, | ||
| 4640 | {0x3800000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3800000}, | ||
| 4641 | {0x3800000, 0x80000001, 0x0, 0x0, 0x3800080}, | ||
| 4642 | {0x3800000, 0x80000001, 0x1, 0x0, 0x3800080}, | ||
| 4643 | {0x3800000, 0x80000001, 0x76, 0x0, 0x3800080}, | ||
| 4644 | {0x3800000, 0x80000001, 0x2b94, 0x0, 0x3800080}, | ||
| 4645 | {0x3800000, 0x80000001, 0x636d24, 0x0, 0x3800080}, | ||
| 4646 | {0x3800000, 0x80000001, 0x7fffff, 0x0, 0x3800080}, | ||
| 4647 | {0x3800000, 0x80000001, 0x800000, 0x800000, 0x3800080}, | ||
| 4648 | {0x3800000, 0x80000001, 0x800002, 0x800002, 0x3800080}, | ||
| 4649 | {0x3800000, 0x80000001, 0x1398437, 0x1398437, 0x3800080}, | ||
| 4650 | {0x3800000, 0x80000001, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 4651 | {0x3800000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 4652 | {0x3800000, 0x80000001, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 4653 | {0x3800000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 4654 | {0x3800000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 4655 | {0x3800000, 0x80000001, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 4656 | {0x3800000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 4657 | {0x3800000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 4658 | {0x3800000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 4659 | {0x3800000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 4660 | {0x3800000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4661 | {0x3800000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 4662 | {0x3800000, 0x80000001, 0x80000000, 0x80000000, 0x3800080}, | ||
| 4663 | {0x3800000, 0x80000001, 0x80000001, 0x0, 0x3800080}, | ||
| 4664 | {0x3800000, 0x80000001, 0x80000076, 0x0, 0x3800080}, | ||
| 4665 | {0x3800000, 0x80000001, 0x80002b94, 0x0, 0x3800080}, | ||
| 4666 | {0x3800000, 0x80000001, 0x80636d24, 0x0, 0x3800080}, | ||
| 4667 | {0x3800000, 0x80000001, 0x807fffff, 0x0, 0x3800080}, | ||
| 4668 | {0x3800000, 0x80000001, 0x80800000, 0x80800000, 0x3800080}, | ||
| 4669 | {0x3800000, 0x80000001, 0x80800002, 0x80800002, 0x3800080}, | ||
| 4670 | {0x3800000, 0x80000001, 0x81398437, 0x81398437, 0x3800080}, | ||
| 4671 | {0x3800000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 4672 | {0x3800000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 4673 | {0x3800000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 4674 | {0x3800000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 4675 | {0x3800000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 4676 | {0x3800000, 0x80000001, 0xff800000, 0xff800000, 0x3800080}, | ||
| 4677 | {0x3800000, 0x80000001, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 4678 | {0x3800000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 4679 | {0x3800000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 4680 | {0x3800000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 4681 | {0x3800000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4682 | {0x3800000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 4683 | {0x3800000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 4684 | {0x3800000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 4685 | {0x3800000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 4686 | {0x3800000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 4687 | {0x3800000, 0x80000001, 0x9503366, 0x9503366, 0x3800080}, | ||
| 4688 | {0x3800000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 4689 | {0x3800000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 4690 | {0x3800000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 4691 | {0x3800000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 4692 | {0x3800000, 0x80000001, 0x966320b, 0x966320b, 0x3800080}, | ||
| 4693 | {0x3800000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 4694 | {0x3800000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 4695 | {0x3800000, 0x80000001, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 4696 | {0x3800000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 4697 | {0x3800000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 4698 | {0x3800000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 4699 | {0x3800000, 0x80000076, 0x0, 0x0, 0x3800080}, | ||
| 4700 | {0x3800000, 0x80000076, 0x1, 0x0, 0x3800080}, | ||
| 4701 | {0x3800000, 0x80000076, 0x76, 0x0, 0x3800080}, | ||
| 4702 | {0x3800000, 0x80000076, 0x2b94, 0x0, 0x3800080}, | ||
| 4703 | {0x3800000, 0x80000076, 0x636d24, 0x0, 0x3800080}, | ||
| 4704 | {0x3800000, 0x80000076, 0x7fffff, 0x0, 0x3800080}, | ||
| 4705 | {0x3800000, 0x80000076, 0x800000, 0x800000, 0x3800080}, | ||
| 4706 | {0x3800000, 0x80000076, 0x800002, 0x800002, 0x3800080}, | ||
| 4707 | {0x3800000, 0x80000076, 0x1398437, 0x1398437, 0x3800080}, | ||
| 4708 | {0x3800000, 0x80000076, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 4709 | {0x3800000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 4710 | {0x3800000, 0x80000076, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 4711 | {0x3800000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 4712 | {0x3800000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 4713 | {0x3800000, 0x80000076, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 4714 | {0x3800000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 4715 | {0x3800000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 4716 | {0x3800000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 4717 | {0x3800000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 4718 | {0x3800000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4719 | {0x3800000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 4720 | {0x3800000, 0x80000076, 0x80000000, 0x80000000, 0x3800080}, | ||
| 4721 | {0x3800000, 0x80000076, 0x80000001, 0x0, 0x3800080}, | ||
| 4722 | {0x3800000, 0x80000076, 0x80000076, 0x0, 0x3800080}, | ||
| 4723 | {0x3800000, 0x80000076, 0x80002b94, 0x0, 0x3800080}, | ||
| 4724 | {0x3800000, 0x80000076, 0x80636d24, 0x0, 0x3800080}, | ||
| 4725 | {0x3800000, 0x80000076, 0x807fffff, 0x0, 0x3800080}, | ||
| 4726 | {0x3800000, 0x80000076, 0x80800000, 0x80800000, 0x3800080}, | ||
| 4727 | {0x3800000, 0x80000076, 0x80800002, 0x80800002, 0x3800080}, | ||
| 4728 | {0x3800000, 0x80000076, 0x81398437, 0x81398437, 0x3800080}, | ||
| 4729 | {0x3800000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 4730 | {0x3800000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 4731 | {0x3800000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 4732 | {0x3800000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 4733 | {0x3800000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 4734 | {0x3800000, 0x80000076, 0xff800000, 0xff800000, 0x3800080}, | ||
| 4735 | {0x3800000, 0x80000076, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 4736 | {0x3800000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 4737 | {0x3800000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 4738 | {0x3800000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 4739 | {0x3800000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4740 | {0x3800000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 4741 | {0x3800000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 4742 | {0x3800000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 4743 | {0x3800000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 4744 | {0x3800000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 4745 | {0x3800000, 0x80000076, 0x9503366, 0x9503366, 0x3800080}, | ||
| 4746 | {0x3800000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 4747 | {0x3800000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 4748 | {0x3800000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 4749 | {0x3800000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 4750 | {0x3800000, 0x80000076, 0x966320b, 0x966320b, 0x3800080}, | ||
| 4751 | {0x3800000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 4752 | {0x3800000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 4753 | {0x3800000, 0x80000076, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 4754 | {0x3800000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 4755 | {0x3800000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 4756 | {0x3800000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 4757 | {0x3800000, 0x80002b94, 0x0, 0x0, 0x3800080}, | ||
| 4758 | {0x3800000, 0x80002b94, 0x1, 0x0, 0x3800080}, | ||
| 4759 | {0x3800000, 0x80002b94, 0x76, 0x0, 0x3800080}, | ||
| 4760 | {0x3800000, 0x80002b94, 0x2b94, 0x0, 0x3800080}, | ||
| 4761 | {0x3800000, 0x80002b94, 0x636d24, 0x0, 0x3800080}, | ||
| 4762 | {0x3800000, 0x80002b94, 0x7fffff, 0x0, 0x3800080}, | ||
| 4763 | {0x3800000, 0x80002b94, 0x800000, 0x800000, 0x3800080}, | ||
| 4764 | {0x3800000, 0x80002b94, 0x800002, 0x800002, 0x3800080}, | ||
| 4765 | {0x3800000, 0x80002b94, 0x1398437, 0x1398437, 0x3800080}, | ||
| 4766 | {0x3800000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 4767 | {0x3800000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 4768 | {0x3800000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 4769 | {0x3800000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 4770 | {0x3800000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 4771 | {0x3800000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 4772 | {0x3800000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 4773 | {0x3800000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 4774 | {0x3800000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 4775 | {0x3800000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 4776 | {0x3800000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4777 | {0x3800000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 4778 | {0x3800000, 0x80002b94, 0x80000000, 0x80000000, 0x3800080}, | ||
| 4779 | {0x3800000, 0x80002b94, 0x80000001, 0x0, 0x3800080}, | ||
| 4780 | {0x3800000, 0x80002b94, 0x80000076, 0x0, 0x3800080}, | ||
| 4781 | {0x3800000, 0x80002b94, 0x80002b94, 0x0, 0x3800080}, | ||
| 4782 | {0x3800000, 0x80002b94, 0x80636d24, 0x0, 0x3800080}, | ||
| 4783 | {0x3800000, 0x80002b94, 0x807fffff, 0x0, 0x3800080}, | ||
| 4784 | {0x3800000, 0x80002b94, 0x80800000, 0x80800000, 0x3800080}, | ||
| 4785 | {0x3800000, 0x80002b94, 0x80800002, 0x80800002, 0x3800080}, | ||
| 4786 | {0x3800000, 0x80002b94, 0x81398437, 0x81398437, 0x3800080}, | ||
| 4787 | {0x3800000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 4788 | {0x3800000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 4789 | {0x3800000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 4790 | {0x3800000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 4791 | {0x3800000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 4792 | {0x3800000, 0x80002b94, 0xff800000, 0xff800000, 0x3800080}, | ||
| 4793 | {0x3800000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 4794 | {0x3800000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 4795 | {0x3800000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 4796 | {0x3800000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 4797 | {0x3800000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4798 | {0x3800000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 4799 | {0x3800000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 4800 | {0x3800000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 4801 | {0x3800000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 4802 | {0x3800000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 4803 | {0x3800000, 0x80002b94, 0x9503366, 0x9503366, 0x3800080}, | ||
| 4804 | {0x3800000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 4805 | {0x3800000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 4806 | {0x3800000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 4807 | {0x3800000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 4808 | {0x3800000, 0x80002b94, 0x966320b, 0x966320b, 0x3800080}, | ||
| 4809 | {0x3800000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 4810 | {0x3800000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 4811 | {0x3800000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 4812 | {0x3800000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 4813 | {0x3800000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 4814 | {0x3800000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 4815 | {0x3800000, 0x80636d24, 0x0, 0x0, 0x3800080}, | ||
| 4816 | {0x3800000, 0x80636d24, 0x1, 0x0, 0x3800080}, | ||
| 4817 | {0x3800000, 0x80636d24, 0x76, 0x0, 0x3800080}, | ||
| 4818 | {0x3800000, 0x80636d24, 0x2b94, 0x0, 0x3800080}, | ||
| 4819 | {0x3800000, 0x80636d24, 0x636d24, 0x0, 0x3800080}, | ||
| 4820 | {0x3800000, 0x80636d24, 0x7fffff, 0x0, 0x3800080}, | ||
| 4821 | {0x3800000, 0x80636d24, 0x800000, 0x800000, 0x3800080}, | ||
| 4822 | {0x3800000, 0x80636d24, 0x800002, 0x800002, 0x3800080}, | ||
| 4823 | {0x3800000, 0x80636d24, 0x1398437, 0x1398437, 0x3800080}, | ||
| 4824 | {0x3800000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 4825 | {0x3800000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 4826 | {0x3800000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 4827 | {0x3800000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 4828 | {0x3800000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 4829 | {0x3800000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 4830 | {0x3800000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 4831 | {0x3800000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 4832 | {0x3800000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 4833 | {0x3800000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 4834 | {0x3800000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4835 | {0x3800000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 4836 | {0x3800000, 0x80636d24, 0x80000000, 0x80000000, 0x3800080}, | ||
| 4837 | {0x3800000, 0x80636d24, 0x80000001, 0x0, 0x3800080}, | ||
| 4838 | {0x3800000, 0x80636d24, 0x80000076, 0x0, 0x3800080}, | ||
| 4839 | {0x3800000, 0x80636d24, 0x80002b94, 0x0, 0x3800080}, | ||
| 4840 | {0x3800000, 0x80636d24, 0x80636d24, 0x0, 0x3800080}, | ||
| 4841 | {0x3800000, 0x80636d24, 0x807fffff, 0x0, 0x3800080}, | ||
| 4842 | {0x3800000, 0x80636d24, 0x80800000, 0x80800000, 0x3800080}, | ||
| 4843 | {0x3800000, 0x80636d24, 0x80800002, 0x80800002, 0x3800080}, | ||
| 4844 | {0x3800000, 0x80636d24, 0x81398437, 0x81398437, 0x3800080}, | ||
| 4845 | {0x3800000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 4846 | {0x3800000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 4847 | {0x3800000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 4848 | {0x3800000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 4849 | {0x3800000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 4850 | {0x3800000, 0x80636d24, 0xff800000, 0xff800000, 0x3800080}, | ||
| 4851 | {0x3800000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 4852 | {0x3800000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 4853 | {0x3800000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 4854 | {0x3800000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 4855 | {0x3800000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4856 | {0x3800000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 4857 | {0x3800000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 4858 | {0x3800000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 4859 | {0x3800000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 4860 | {0x3800000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 4861 | {0x3800000, 0x80636d24, 0x9503366, 0x9503366, 0x3800080}, | ||
| 4862 | {0x3800000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 4863 | {0x3800000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 4864 | {0x3800000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 4865 | {0x3800000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 4866 | {0x3800000, 0x80636d24, 0x966320b, 0x966320b, 0x3800080}, | ||
| 4867 | {0x3800000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 4868 | {0x3800000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 4869 | {0x3800000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 4870 | {0x3800000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 4871 | {0x3800000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 4872 | {0x3800000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 4873 | {0x3800000, 0x807fffff, 0x0, 0x0, 0x3800080}, | ||
| 4874 | {0x3800000, 0x807fffff, 0x1, 0x0, 0x3800080}, | ||
| 4875 | {0x3800000, 0x807fffff, 0x76, 0x0, 0x3800080}, | ||
| 4876 | {0x3800000, 0x807fffff, 0x2b94, 0x0, 0x3800080}, | ||
| 4877 | {0x3800000, 0x807fffff, 0x636d24, 0x0, 0x3800080}, | ||
| 4878 | {0x3800000, 0x807fffff, 0x7fffff, 0x0, 0x3800080}, | ||
| 4879 | {0x3800000, 0x807fffff, 0x800000, 0x800000, 0x3800080}, | ||
| 4880 | {0x3800000, 0x807fffff, 0x800002, 0x800002, 0x3800080}, | ||
| 4881 | {0x3800000, 0x807fffff, 0x1398437, 0x1398437, 0x3800080}, | ||
| 4882 | {0x3800000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3800080}, | ||
| 4883 | {0x3800000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3800080}, | ||
| 4884 | {0x3800000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3800080}, | ||
| 4885 | {0x3800000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, | ||
| 4886 | {0x3800000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3800080}, | ||
| 4887 | {0x3800000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3800080}, | ||
| 4888 | {0x3800000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3800081}, | ||
| 4889 | {0x3800000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3800081}, | ||
| 4890 | {0x3800000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3800081}, | ||
| 4891 | {0x3800000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3800080}, | ||
| 4892 | {0x3800000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4893 | {0x3800000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3800080}, | ||
| 4894 | {0x3800000, 0x807fffff, 0x80000000, 0x80000000, 0x3800080}, | ||
| 4895 | {0x3800000, 0x807fffff, 0x80000001, 0x0, 0x3800080}, | ||
| 4896 | {0x3800000, 0x807fffff, 0x80000076, 0x0, 0x3800080}, | ||
| 4897 | {0x3800000, 0x807fffff, 0x80002b94, 0x0, 0x3800080}, | ||
| 4898 | {0x3800000, 0x807fffff, 0x80636d24, 0x0, 0x3800080}, | ||
| 4899 | {0x3800000, 0x807fffff, 0x807fffff, 0x0, 0x3800080}, | ||
| 4900 | {0x3800000, 0x807fffff, 0x80800000, 0x80800000, 0x3800080}, | ||
| 4901 | {0x3800000, 0x807fffff, 0x80800002, 0x80800002, 0x3800080}, | ||
| 4902 | {0x3800000, 0x807fffff, 0x81398437, 0x81398437, 0x3800080}, | ||
| 4903 | {0x3800000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3800080}, | ||
| 4904 | {0x3800000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, | ||
| 4905 | {0x3800000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3800080}, | ||
| 4906 | {0x3800000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3800080}, | ||
| 4907 | {0x3800000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3800080}, | ||
| 4908 | {0x3800000, 0x807fffff, 0xff800000, 0xff800000, 0x3800080}, | ||
| 4909 | {0x3800000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3800081}, | ||
| 4910 | {0x3800000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3800081}, | ||
| 4911 | {0x3800000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3800081}, | ||
| 4912 | {0x3800000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3800080}, | ||
| 4913 | {0x3800000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3800080}, | ||
| 4914 | {0x3800000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3800080}, | ||
| 4915 | {0x3800000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3800080}, | ||
| 4916 | {0x3800000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3800080}, | ||
| 4917 | {0x3800000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3800080}, | ||
| 4918 | {0x3800000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3800080}, | ||
| 4919 | {0x3800000, 0x807fffff, 0x9503366, 0x9503366, 0x3800080}, | ||
| 4920 | {0x3800000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, | ||
| 4921 | {0x3800000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, | ||
| 4922 | {0x3800000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3800080}, | ||
| 4923 | {0x3800000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, | ||
| 4924 | {0x3800000, 0x807fffff, 0x966320b, 0x966320b, 0x3800080}, | ||
| 4925 | {0x3800000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3800080}, | ||
| 4926 | {0x3800000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, | ||
| 4927 | {0x3800000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3800080}, | ||
| 4928 | {0x3800000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3800080}, | ||
| 4929 | {0x3800000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, | ||
| 4930 | {0x3800000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3800080}, | ||
| 4931 | {0x3800000, 0x80800000, 0x0, 0x80800000, 0x3800000}, | ||
| 4932 | {0x3800000, 0x80800000, 0x1, 0x80800000, 0x3800080}, | ||
| 4933 | {0x3800000, 0x80800000, 0x76, 0x80800000, 0x3800080}, | ||
| 4934 | {0x3800000, 0x80800000, 0x2b94, 0x80800000, 0x3800080}, | ||
| 4935 | {0x3800000, 0x80800000, 0x636d24, 0x80800000, 0x3800080}, | ||
| 4936 | {0x3800000, 0x80800000, 0x7fffff, 0x80800000, 0x3800080}, | ||
| 4937 | {0x3800000, 0x80800000, 0x800000, 0x80000000, 0x3800000}, | ||
| 4938 | {0x3800000, 0x80800000, 0x800002, 0x0, 0x3800008}, | ||
| 4939 | {0x3800000, 0x80800000, 0x1398437, 0xf3086e, 0x3800000}, | ||
| 4940 | {0x3800000, 0x80800000, 0xba98d27, 0xba98d25, 0x3800000}, | ||
| 4941 | {0x3800000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3800000}, | ||
| 4942 | {0x3800000, 0x80800000, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 4943 | {0x3800000, 0x80800000, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 4944 | {0x3800000, 0x80800000, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 4945 | {0x3800000, 0x80800000, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 4946 | {0x3800000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 4947 | {0x3800000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 4948 | {0x3800000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 4949 | {0x3800000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 4950 | {0x3800000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4951 | {0x3800000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 4952 | {0x3800000, 0x80800000, 0x80000000, 0x80800000, 0x3800000}, | ||
| 4953 | {0x3800000, 0x80800000, 0x80000001, 0x80800000, 0x3800080}, | ||
| 4954 | {0x3800000, 0x80800000, 0x80000076, 0x80800000, 0x3800080}, | ||
| 4955 | {0x3800000, 0x80800000, 0x80002b94, 0x80800000, 0x3800080}, | ||
| 4956 | {0x3800000, 0x80800000, 0x80636d24, 0x80800000, 0x3800080}, | ||
| 4957 | {0x3800000, 0x80800000, 0x807fffff, 0x80800000, 0x3800080}, | ||
| 4958 | {0x3800000, 0x80800000, 0x80800000, 0x81000000, 0x3800000}, | ||
| 4959 | {0x3800000, 0x80800000, 0x80800002, 0x81000001, 0x3800000}, | ||
| 4960 | {0x3800000, 0x80800000, 0x81398437, 0x81798437, 0x3800000}, | ||
| 4961 | {0x3800000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3800000}, | ||
| 4962 | {0x3800000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3800000}, | ||
| 4963 | {0x3800000, 0x80800000, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 4964 | {0x3800000, 0x80800000, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 4965 | {0x3800000, 0x80800000, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 4966 | {0x3800000, 0x80800000, 0xff800000, 0xff800000, 0x3800000}, | ||
| 4967 | {0x3800000, 0x80800000, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 4968 | {0x3800000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 4969 | {0x3800000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 4970 | {0x3800000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 4971 | {0x3800000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 4972 | {0x3800000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 4973 | {0x3800000, 0x80800000, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 4974 | {0x3800000, 0x80800000, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 4975 | {0x3800000, 0x80800000, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 4976 | {0x3800000, 0x80800000, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 4977 | {0x3800000, 0x80800000, 0x9503366, 0x9503326, 0x3800000}, | ||
| 4978 | {0x3800000, 0x80800000, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, | ||
| 4979 | {0x3800000, 0x80800000, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 4980 | {0x3800000, 0x80800000, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 4981 | {0x3800000, 0x80800000, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, | ||
| 4982 | {0x3800000, 0x80800000, 0x966320b, 0x96631cb, 0x3800000}, | ||
| 4983 | {0x3800000, 0x80800000, 0xb26bddee, 0xb26bddef, 0x3800010}, | ||
| 4984 | {0x3800000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, | ||
| 4985 | {0x3800000, 0x80800000, 0x317285d3, 0x317285d2, 0x3800010}, | ||
| 4986 | {0x3800000, 0x80800000, 0x3c9623b1, 0x3c9623b0, 0x3800010}, | ||
| 4987 | {0x3800000, 0x80800000, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 4988 | {0x3800000, 0x80800000, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 4989 | {0x3800000, 0x80800002, 0x0, 0x80800002, 0x3800000}, | ||
| 4990 | {0x3800000, 0x80800002, 0x1, 0x80800002, 0x3800080}, | ||
| 4991 | {0x3800000, 0x80800002, 0x76, 0x80800002, 0x3800080}, | ||
| 4992 | {0x3800000, 0x80800002, 0x2b94, 0x80800002, 0x3800080}, | ||
| 4993 | {0x3800000, 0x80800002, 0x636d24, 0x80800002, 0x3800080}, | ||
| 4994 | {0x3800000, 0x80800002, 0x7fffff, 0x80800002, 0x3800080}, | ||
| 4995 | {0x3800000, 0x80800002, 0x800000, 0x0, 0x3800008}, | ||
| 4996 | {0x3800000, 0x80800002, 0x800002, 0x80000000, 0x3800000}, | ||
| 4997 | {0x3800000, 0x80800002, 0x1398437, 0xf3086c, 0x3800000}, | ||
| 4998 | {0x3800000, 0x80800002, 0xba98d27, 0xba98d24, 0x3800010}, | ||
| 4999 | {0x3800000, 0x80800002, 0xba98d7a, 0xba98d77, 0x3800010}, | ||
| 5000 | {0x3800000, 0x80800002, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 5001 | {0x3800000, 0x80800002, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 5002 | {0x3800000, 0x80800002, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 5003 | {0x3800000, 0x80800002, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5004 | {0x3800000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5005 | {0x3800000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5006 | {0x3800000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5007 | {0x3800000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5008 | {0x3800000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5009 | {0x3800000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5010 | {0x3800000, 0x80800002, 0x80000000, 0x80800002, 0x3800000}, | ||
| 5011 | {0x3800000, 0x80800002, 0x80000001, 0x80800002, 0x3800080}, | ||
| 5012 | {0x3800000, 0x80800002, 0x80000076, 0x80800002, 0x3800080}, | ||
| 5013 | {0x3800000, 0x80800002, 0x80002b94, 0x80800002, 0x3800080}, | ||
| 5014 | {0x3800000, 0x80800002, 0x80636d24, 0x80800002, 0x3800080}, | ||
| 5015 | {0x3800000, 0x80800002, 0x807fffff, 0x80800002, 0x3800080}, | ||
| 5016 | {0x3800000, 0x80800002, 0x80800000, 0x81000001, 0x3800000}, | ||
| 5017 | {0x3800000, 0x80800002, 0x80800002, 0x81000002, 0x3800000}, | ||
| 5018 | {0x3800000, 0x80800002, 0x81398437, 0x81798438, 0x3800000}, | ||
| 5019 | {0x3800000, 0x80800002, 0x8ba98d27, 0x8ba98d2a, 0x3800010}, | ||
| 5020 | {0x3800000, 0x80800002, 0x8ba98d7a, 0x8ba98d7d, 0x3800010}, | ||
| 5021 | {0x3800000, 0x80800002, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 5022 | {0x3800000, 0x80800002, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 5023 | {0x3800000, 0x80800002, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 5024 | {0x3800000, 0x80800002, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5025 | {0x3800000, 0x80800002, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5026 | {0x3800000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5027 | {0x3800000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5028 | {0x3800000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5029 | {0x3800000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5030 | {0x3800000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5031 | {0x3800000, 0x80800002, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 5032 | {0x3800000, 0x80800002, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 5033 | {0x3800000, 0x80800002, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 5034 | {0x3800000, 0x80800002, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 5035 | {0x3800000, 0x80800002, 0x9503366, 0x9503325, 0x3800010}, | ||
| 5036 | {0x3800000, 0x80800002, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, | ||
| 5037 | {0x3800000, 0x80800002, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 5038 | {0x3800000, 0x80800002, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 5039 | {0x3800000, 0x80800002, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, | ||
| 5040 | {0x3800000, 0x80800002, 0x966320b, 0x96631ca, 0x3800010}, | ||
| 5041 | {0x3800000, 0x80800002, 0xb26bddee, 0xb26bddef, 0x3800010}, | ||
| 5042 | {0x3800000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, | ||
| 5043 | {0x3800000, 0x80800002, 0x317285d3, 0x317285d2, 0x3800010}, | ||
| 5044 | {0x3800000, 0x80800002, 0x3c9623b1, 0x3c9623b0, 0x3800010}, | ||
| 5045 | {0x3800000, 0x80800002, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 5046 | {0x3800000, 0x80800002, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 5047 | {0x3800000, 0x81398437, 0x0, 0x81398437, 0x3800000}, | ||
| 5048 | {0x3800000, 0x81398437, 0x1, 0x81398437, 0x3800080}, | ||
| 5049 | {0x3800000, 0x81398437, 0x76, 0x81398437, 0x3800080}, | ||
| 5050 | {0x3800000, 0x81398437, 0x2b94, 0x81398437, 0x3800080}, | ||
| 5051 | {0x3800000, 0x81398437, 0x636d24, 0x81398437, 0x3800080}, | ||
| 5052 | {0x3800000, 0x81398437, 0x7fffff, 0x81398437, 0x3800080}, | ||
| 5053 | {0x3800000, 0x81398437, 0x800000, 0x80f3086e, 0x3800000}, | ||
| 5054 | {0x3800000, 0x81398437, 0x800002, 0x80f3086c, 0x3800000}, | ||
| 5055 | {0x3800000, 0x81398437, 0x1398437, 0x80000000, 0x3800000}, | ||
| 5056 | {0x3800000, 0x81398437, 0xba98d27, 0xba98d21, 0x3800010}, | ||
| 5057 | {0x3800000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3800010}, | ||
| 5058 | {0x3800000, 0x81398437, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 5059 | {0x3800000, 0x81398437, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 5060 | {0x3800000, 0x81398437, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 5061 | {0x3800000, 0x81398437, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5062 | {0x3800000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5063 | {0x3800000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5064 | {0x3800000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5065 | {0x3800000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5066 | {0x3800000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5067 | {0x3800000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5068 | {0x3800000, 0x81398437, 0x80000000, 0x81398437, 0x3800000}, | ||
| 5069 | {0x3800000, 0x81398437, 0x80000001, 0x81398437, 0x3800080}, | ||
| 5070 | {0x3800000, 0x81398437, 0x80000076, 0x81398437, 0x3800080}, | ||
| 5071 | {0x3800000, 0x81398437, 0x80002b94, 0x81398437, 0x3800080}, | ||
| 5072 | {0x3800000, 0x81398437, 0x80636d24, 0x81398437, 0x3800080}, | ||
| 5073 | {0x3800000, 0x81398437, 0x807fffff, 0x81398437, 0x3800080}, | ||
| 5074 | {0x3800000, 0x81398437, 0x80800000, 0x81798437, 0x3800000}, | ||
| 5075 | {0x3800000, 0x81398437, 0x80800002, 0x81798438, 0x3800000}, | ||
| 5076 | {0x3800000, 0x81398437, 0x81398437, 0x81b98437, 0x3800000}, | ||
| 5077 | {0x3800000, 0x81398437, 0x8ba98d27, 0x8ba98d2d, 0x3800010}, | ||
| 5078 | {0x3800000, 0x81398437, 0x8ba98d7a, 0x8ba98d80, 0x3800010}, | ||
| 5079 | {0x3800000, 0x81398437, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 5080 | {0x3800000, 0x81398437, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 5081 | {0x3800000, 0x81398437, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 5082 | {0x3800000, 0x81398437, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5083 | {0x3800000, 0x81398437, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5084 | {0x3800000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5085 | {0x3800000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5086 | {0x3800000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5087 | {0x3800000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5088 | {0x3800000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5089 | {0x3800000, 0x81398437, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 5090 | {0x3800000, 0x81398437, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 5091 | {0x3800000, 0x81398437, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 5092 | {0x3800000, 0x81398437, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 5093 | {0x3800000, 0x81398437, 0x9503366, 0x95032ac, 0x3800010}, | ||
| 5094 | {0x3800000, 0x81398437, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, | ||
| 5095 | {0x3800000, 0x81398437, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 5096 | {0x3800000, 0x81398437, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 5097 | {0x3800000, 0x81398437, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, | ||
| 5098 | {0x3800000, 0x81398437, 0x966320b, 0x9663151, 0x3800010}, | ||
| 5099 | {0x3800000, 0x81398437, 0xb26bddee, 0xb26bddef, 0x3800010}, | ||
| 5100 | {0x3800000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, | ||
| 5101 | {0x3800000, 0x81398437, 0x317285d3, 0x317285d2, 0x3800010}, | ||
| 5102 | {0x3800000, 0x81398437, 0x3c9623b1, 0x3c9623b0, 0x3800010}, | ||
| 5103 | {0x3800000, 0x81398437, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 5104 | {0x3800000, 0x81398437, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 5105 | {0x3800000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3800000}, | ||
| 5106 | {0x3800000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3800080}, | ||
| 5107 | {0x3800000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3800080}, | ||
| 5108 | {0x3800000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3800080}, | ||
| 5109 | {0x3800000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3800080}, | ||
| 5110 | {0x3800000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3800080}, | ||
| 5111 | {0x3800000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3800000}, | ||
| 5112 | {0x3800000, 0x8ba98d27, 0x800002, 0x8ba98d25, 0x3800010}, | ||
| 5113 | {0x3800000, 0x8ba98d27, 0x1398437, 0x8ba98d22, 0x3800010}, | ||
| 5114 | {0x3800000, 0x8ba98d27, 0xba98d27, 0x80000000, 0x3800000}, | ||
| 5115 | {0x3800000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3800000}, | ||
| 5116 | {0x3800000, 0x8ba98d27, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 5117 | {0x3800000, 0x8ba98d27, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 5118 | {0x3800000, 0x8ba98d27, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 5119 | {0x3800000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5120 | {0x3800000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5121 | {0x3800000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5122 | {0x3800000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5123 | {0x3800000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5124 | {0x3800000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5125 | {0x3800000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5126 | {0x3800000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3800000}, | ||
| 5127 | {0x3800000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3800080}, | ||
| 5128 | {0x3800000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3800080}, | ||
| 5129 | {0x3800000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3800080}, | ||
| 5130 | {0x3800000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3800080}, | ||
| 5131 | {0x3800000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3800080}, | ||
| 5132 | {0x3800000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3800000}, | ||
| 5133 | {0x3800000, 0x8ba98d27, 0x80800002, 0x8ba98d2a, 0x3800010}, | ||
| 5134 | {0x3800000, 0x8ba98d27, 0x81398437, 0x8ba98d2d, 0x3800010}, | ||
| 5135 | {0x3800000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3800000}, | ||
| 5136 | {0x3800000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d51, 0x3800010}, | ||
| 5137 | {0x3800000, 0x8ba98d27, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 5138 | {0x3800000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 5139 | {0x3800000, 0x8ba98d27, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 5140 | {0x3800000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5141 | {0x3800000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5142 | {0x3800000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5143 | {0x3800000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5144 | {0x3800000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5145 | {0x3800000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5146 | {0x3800000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5147 | {0x3800000, 0x8ba98d27, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 5148 | {0x3800000, 0x8ba98d27, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 5149 | {0x3800000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 5150 | {0x3800000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 5151 | {0x3800000, 0x8ba98d27, 0x9503366, 0x8ba30b8c, 0x3800010}, | ||
| 5152 | {0x3800000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, | ||
| 5153 | {0x3800000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 5154 | {0x3800000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 5155 | {0x3800000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, | ||
| 5156 | {0x3800000, 0x8ba98d27, 0x966320b, 0x8ba25b97, 0x3800010}, | ||
| 5157 | {0x3800000, 0x8ba98d27, 0xb26bddee, 0xb26bddef, 0x3800010}, | ||
| 5158 | {0x3800000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, | ||
| 5159 | {0x3800000, 0x8ba98d27, 0x317285d3, 0x317285d2, 0x3800010}, | ||
| 5160 | {0x3800000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b0, 0x3800010}, | ||
| 5161 | {0x3800000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 5162 | {0x3800000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 5163 | {0x3800000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3800000}, | ||
| 5164 | {0x3800000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3800080}, | ||
| 5165 | {0x3800000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3800080}, | ||
| 5166 | {0x3800000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3800080}, | ||
| 5167 | {0x3800000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3800080}, | ||
| 5168 | {0x3800000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3800080}, | ||
| 5169 | {0x3800000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3800000}, | ||
| 5170 | {0x3800000, 0x8ba98d7a, 0x800002, 0x8ba98d78, 0x3800010}, | ||
| 5171 | {0x3800000, 0x8ba98d7a, 0x1398437, 0x8ba98d75, 0x3800010}, | ||
| 5172 | {0x3800000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3800000}, | ||
| 5173 | {0x3800000, 0x8ba98d7a, 0xba98d7a, 0x80000000, 0x3800000}, | ||
| 5174 | {0x3800000, 0x8ba98d7a, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 5175 | {0x3800000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 5176 | {0x3800000, 0x8ba98d7a, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 5177 | {0x3800000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5178 | {0x3800000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5179 | {0x3800000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5180 | {0x3800000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5181 | {0x3800000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5182 | {0x3800000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5183 | {0x3800000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5184 | {0x3800000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3800000}, | ||
| 5185 | {0x3800000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3800080}, | ||
| 5186 | {0x3800000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3800080}, | ||
| 5187 | {0x3800000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3800080}, | ||
| 5188 | {0x3800000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3800080}, | ||
| 5189 | {0x3800000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3800080}, | ||
| 5190 | {0x3800000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3800000}, | ||
| 5191 | {0x3800000, 0x8ba98d7a, 0x80800002, 0x8ba98d7d, 0x3800010}, | ||
| 5192 | {0x3800000, 0x8ba98d7a, 0x81398437, 0x8ba98d80, 0x3800010}, | ||
| 5193 | {0x3800000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d51, 0x3800010}, | ||
| 5194 | {0x3800000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3800000}, | ||
| 5195 | {0x3800000, 0x8ba98d7a, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 5196 | {0x3800000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 5197 | {0x3800000, 0x8ba98d7a, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 5198 | {0x3800000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5199 | {0x3800000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5200 | {0x3800000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5201 | {0x3800000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5202 | {0x3800000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5203 | {0x3800000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5204 | {0x3800000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5205 | {0x3800000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 5206 | {0x3800000, 0x8ba98d7a, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 5207 | {0x3800000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 5208 | {0x3800000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 5209 | {0x3800000, 0x8ba98d7a, 0x9503366, 0x8ba30bdf, 0x3800010}, | ||
| 5210 | {0x3800000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, | ||
| 5211 | {0x3800000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 5212 | {0x3800000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 5213 | {0x3800000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, | ||
| 5214 | {0x3800000, 0x8ba98d7a, 0x966320b, 0x8ba25bea, 0x3800010}, | ||
| 5215 | {0x3800000, 0x8ba98d7a, 0xb26bddee, 0xb26bddef, 0x3800010}, | ||
| 5216 | {0x3800000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, | ||
| 5217 | {0x3800000, 0x8ba98d7a, 0x317285d3, 0x317285d2, 0x3800010}, | ||
| 5218 | {0x3800000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b0, 0x3800010}, | ||
| 5219 | {0x3800000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 5220 | {0x3800000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 5221 | {0x3800000, 0xf51f853a, 0x0, 0xf51f853a, 0x3800000}, | ||
| 5222 | {0x3800000, 0xf51f853a, 0x1, 0xf51f853a, 0x3800080}, | ||
| 5223 | {0x3800000, 0xf51f853a, 0x76, 0xf51f853a, 0x3800080}, | ||
| 5224 | {0x3800000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3800080}, | ||
| 5225 | {0x3800000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3800080}, | ||
| 5226 | {0x3800000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3800080}, | ||
| 5227 | {0x3800000, 0xf51f853a, 0x800000, 0xf51f853a, 0x3800010}, | ||
| 5228 | {0x3800000, 0xf51f853a, 0x800002, 0xf51f853a, 0x3800010}, | ||
| 5229 | {0x3800000, 0xf51f853a, 0x1398437, 0xf51f853a, 0x3800010}, | ||
| 5230 | {0x3800000, 0xf51f853a, 0xba98d27, 0xf51f853a, 0x3800010}, | ||
| 5231 | {0x3800000, 0xf51f853a, 0xba98d7a, 0xf51f853a, 0x3800010}, | ||
| 5232 | {0x3800000, 0xf51f853a, 0x751f853a, 0x80000000, 0x3800000}, | ||
| 5233 | {0x3800000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3800010}, | ||
| 5234 | {0x3800000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3800010}, | ||
| 5235 | {0x3800000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5236 | {0x3800000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5237 | {0x3800000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5238 | {0x3800000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5239 | {0x3800000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5240 | {0x3800000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5241 | {0x3800000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5242 | {0x3800000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3800000}, | ||
| 5243 | {0x3800000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3800080}, | ||
| 5244 | {0x3800000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3800080}, | ||
| 5245 | {0x3800000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3800080}, | ||
| 5246 | {0x3800000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3800080}, | ||
| 5247 | {0x3800000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3800080}, | ||
| 5248 | {0x3800000, 0xf51f853a, 0x80800000, 0xf51f853b, 0x3800010}, | ||
| 5249 | {0x3800000, 0xf51f853a, 0x80800002, 0xf51f853b, 0x3800010}, | ||
| 5250 | {0x3800000, 0xf51f853a, 0x81398437, 0xf51f853b, 0x3800010}, | ||
| 5251 | {0x3800000, 0xf51f853a, 0x8ba98d27, 0xf51f853b, 0x3800010}, | ||
| 5252 | {0x3800000, 0xf51f853a, 0x8ba98d7a, 0xf51f853b, 0x3800010}, | ||
| 5253 | {0x3800000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3800000}, | ||
| 5254 | {0x3800000, 0xf51f853a, 0xff7ffff0, 0xff7ffffa, 0x3800010}, | ||
| 5255 | {0x3800000, 0xf51f853a, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 5256 | {0x3800000, 0xf51f853a, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5257 | {0x3800000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5258 | {0x3800000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5259 | {0x3800000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5260 | {0x3800000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5261 | {0x3800000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5262 | {0x3800000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5263 | {0x3800000, 0xf51f853a, 0x4f3495cb, 0xf51f853a, 0x3800010}, | ||
| 5264 | {0x3800000, 0xf51f853a, 0xe73a5134, 0xf51f853b, 0x3800010}, | ||
| 5265 | {0x3800000, 0xf51f853a, 0x7c994e9e, 0x7c994d5e, 0x3800010}, | ||
| 5266 | {0x3800000, 0xf51f853a, 0x6164bd6c, 0xf51f853a, 0x3800010}, | ||
| 5267 | {0x3800000, 0xf51f853a, 0x9503366, 0xf51f853a, 0x3800010}, | ||
| 5268 | {0x3800000, 0xf51f853a, 0xbf5a97c9, 0xf51f853b, 0x3800010}, | ||
| 5269 | {0x3800000, 0xf51f853a, 0xe6ff1a14, 0xf51f853b, 0x3800010}, | ||
| 5270 | {0x3800000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3800010}, | ||
| 5271 | {0x3800000, 0xf51f853a, 0xaab4d7d8, 0xf51f853b, 0x3800010}, | ||
| 5272 | {0x3800000, 0xf51f853a, 0x966320b, 0xf51f853a, 0x3800010}, | ||
| 5273 | {0x3800000, 0xf51f853a, 0xb26bddee, 0xf51f853b, 0x3800010}, | ||
| 5274 | {0x3800000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853b, 0x3800010}, | ||
| 5275 | {0x3800000, 0xf51f853a, 0x317285d3, 0xf51f853a, 0x3800010}, | ||
| 5276 | {0x3800000, 0xf51f853a, 0x3c9623b1, 0xf51f853a, 0x3800010}, | ||
| 5277 | {0x3800000, 0xf51f853a, 0x51fd2c7c, 0xf51f853a, 0x3800010}, | ||
| 5278 | {0x3800000, 0xf51f853a, 0x7b906a6c, 0x7b90656f, 0x3800010}, | ||
| 5279 | {0x3800000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3800000}, | ||
| 5280 | {0x3800000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3800080}, | ||
| 5281 | {0x3800000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3800080}, | ||
| 5282 | {0x3800000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3800080}, | ||
| 5283 | {0x3800000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3800080}, | ||
| 5284 | {0x3800000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3800080}, | ||
| 5285 | {0x3800000, 0xff7ffff0, 0x800000, 0xff7ffff0, 0x3800010}, | ||
| 5286 | {0x3800000, 0xff7ffff0, 0x800002, 0xff7ffff0, 0x3800010}, | ||
| 5287 | {0x3800000, 0xff7ffff0, 0x1398437, 0xff7ffff0, 0x3800010}, | ||
| 5288 | {0x3800000, 0xff7ffff0, 0xba98d27, 0xff7ffff0, 0x3800010}, | ||
| 5289 | {0x3800000, 0xff7ffff0, 0xba98d7a, 0xff7ffff0, 0x3800010}, | ||
| 5290 | {0x3800000, 0xff7ffff0, 0x751f853a, 0xff7fffe7, 0x3800010}, | ||
| 5291 | {0x3800000, 0xff7ffff0, 0x7f7ffff0, 0x80000000, 0x3800000}, | ||
| 5292 | {0x3800000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3800000}, | ||
| 5293 | {0x3800000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5294 | {0x3800000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5295 | {0x3800000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5296 | {0x3800000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5297 | {0x3800000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5298 | {0x3800000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5299 | {0x3800000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5300 | {0x3800000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3800000}, | ||
| 5301 | {0x3800000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3800080}, | ||
| 5302 | {0x3800000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3800080}, | ||
| 5303 | {0x3800000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3800080}, | ||
| 5304 | {0x3800000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3800080}, | ||
| 5305 | {0x3800000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3800080}, | ||
| 5306 | {0x3800000, 0xff7ffff0, 0x80800000, 0xff7ffff1, 0x3800010}, | ||
| 5307 | {0x3800000, 0xff7ffff0, 0x80800002, 0xff7ffff1, 0x3800010}, | ||
| 5308 | {0x3800000, 0xff7ffff0, 0x81398437, 0xff7ffff1, 0x3800010}, | ||
| 5309 | {0x3800000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff1, 0x3800010}, | ||
| 5310 | {0x3800000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff1, 0x3800010}, | ||
| 5311 | {0x3800000, 0xff7ffff0, 0xf51f853a, 0xff7ffffa, 0x3800010}, | ||
| 5312 | {0x3800000, 0xff7ffff0, 0xff7ffff0, 0xff800000, 0x3800014}, | ||
| 5313 | {0x3800000, 0xff7ffff0, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 5314 | {0x3800000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5315 | {0x3800000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5316 | {0x3800000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5317 | {0x3800000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5318 | {0x3800000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5319 | {0x3800000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5320 | {0x3800000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5321 | {0x3800000, 0xff7ffff0, 0x4f3495cb, 0xff7ffff0, 0x3800010}, | ||
| 5322 | {0x3800000, 0xff7ffff0, 0xe73a5134, 0xff7ffff1, 0x3800010}, | ||
| 5323 | {0x3800000, 0xff7ffff0, 0x7c994e9e, 0xff7b357c, 0x3800010}, | ||
| 5324 | {0x3800000, 0xff7ffff0, 0x6164bd6c, 0xff7ffff0, 0x3800010}, | ||
| 5325 | {0x3800000, 0xff7ffff0, 0x9503366, 0xff7ffff0, 0x3800010}, | ||
| 5326 | {0x3800000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff1, 0x3800010}, | ||
| 5327 | {0x3800000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff1, 0x3800010}, | ||
| 5328 | {0x3800000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe0a, 0x3800010}, | ||
| 5329 | {0x3800000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff1, 0x3800010}, | ||
| 5330 | {0x3800000, 0xff7ffff0, 0x966320b, 0xff7ffff0, 0x3800010}, | ||
| 5331 | {0x3800000, 0xff7ffff0, 0xb26bddee, 0xff7ffff1, 0x3800010}, | ||
| 5332 | {0x3800000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff1, 0x3800010}, | ||
| 5333 | {0x3800000, 0xff7ffff0, 0x317285d3, 0xff7ffff0, 0x3800010}, | ||
| 5334 | {0x3800000, 0xff7ffff0, 0x3c9623b1, 0xff7ffff0, 0x3800010}, | ||
| 5335 | {0x3800000, 0xff7ffff0, 0x51fd2c7c, 0xff7ffff0, 0x3800010}, | ||
| 5336 | {0x3800000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1c, 0x3800010}, | ||
| 5337 | {0x3800000, 0xff7fffff, 0x0, 0xff7fffff, 0x3800000}, | ||
| 5338 | {0x3800000, 0xff7fffff, 0x1, 0xff7fffff, 0x3800080}, | ||
| 5339 | {0x3800000, 0xff7fffff, 0x76, 0xff7fffff, 0x3800080}, | ||
| 5340 | {0x3800000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3800080}, | ||
| 5341 | {0x3800000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3800080}, | ||
| 5342 | {0x3800000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3800080}, | ||
| 5343 | {0x3800000, 0xff7fffff, 0x800000, 0xff7fffff, 0x3800010}, | ||
| 5344 | {0x3800000, 0xff7fffff, 0x800002, 0xff7fffff, 0x3800010}, | ||
| 5345 | {0x3800000, 0xff7fffff, 0x1398437, 0xff7fffff, 0x3800010}, | ||
| 5346 | {0x3800000, 0xff7fffff, 0xba98d27, 0xff7fffff, 0x3800010}, | ||
| 5347 | {0x3800000, 0xff7fffff, 0xba98d7a, 0xff7fffff, 0x3800010}, | ||
| 5348 | {0x3800000, 0xff7fffff, 0x751f853a, 0xff7ffff6, 0x3800010}, | ||
| 5349 | {0x3800000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3800000}, | ||
| 5350 | {0x3800000, 0xff7fffff, 0x7f7fffff, 0x80000000, 0x3800000}, | ||
| 5351 | {0x3800000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5352 | {0x3800000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5353 | {0x3800000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5354 | {0x3800000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5355 | {0x3800000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5356 | {0x3800000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5357 | {0x3800000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5358 | {0x3800000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3800000}, | ||
| 5359 | {0x3800000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3800080}, | ||
| 5360 | {0x3800000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3800080}, | ||
| 5361 | {0x3800000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3800080}, | ||
| 5362 | {0x3800000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3800080}, | ||
| 5363 | {0x3800000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3800080}, | ||
| 5364 | {0x3800000, 0xff7fffff, 0x80800000, 0xff800000, 0x3800014}, | ||
| 5365 | {0x3800000, 0xff7fffff, 0x80800002, 0xff800000, 0x3800014}, | ||
| 5366 | {0x3800000, 0xff7fffff, 0x81398437, 0xff800000, 0x3800014}, | ||
| 5367 | {0x3800000, 0xff7fffff, 0x8ba98d27, 0xff800000, 0x3800014}, | ||
| 5368 | {0x3800000, 0xff7fffff, 0x8ba98d7a, 0xff800000, 0x3800014}, | ||
| 5369 | {0x3800000, 0xff7fffff, 0xf51f853a, 0xff800000, 0x3800014}, | ||
| 5370 | {0x3800000, 0xff7fffff, 0xff7ffff0, 0xff800000, 0x3800014}, | ||
| 5371 | {0x3800000, 0xff7fffff, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 5372 | {0x3800000, 0xff7fffff, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5373 | {0x3800000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5374 | {0x3800000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5375 | {0x3800000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5376 | {0x3800000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5377 | {0x3800000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5378 | {0x3800000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5379 | {0x3800000, 0xff7fffff, 0x4f3495cb, 0xff7fffff, 0x3800010}, | ||
| 5380 | {0x3800000, 0xff7fffff, 0xe73a5134, 0xff800000, 0x3800014}, | ||
| 5381 | {0x3800000, 0xff7fffff, 0x7c994e9e, 0xff7b358b, 0x3800010}, | ||
| 5382 | {0x3800000, 0xff7fffff, 0x6164bd6c, 0xff7fffff, 0x3800010}, | ||
| 5383 | {0x3800000, 0xff7fffff, 0x9503366, 0xff7fffff, 0x3800010}, | ||
| 5384 | {0x3800000, 0xff7fffff, 0xbf5a97c9, 0xff800000, 0x3800014}, | ||
| 5385 | {0x3800000, 0xff7fffff, 0xe6ff1a14, 0xff800000, 0x3800014}, | ||
| 5386 | {0x3800000, 0xff7fffff, 0x77f31e2f, 0xff7ffe19, 0x3800010}, | ||
| 5387 | {0x3800000, 0xff7fffff, 0xaab4d7d8, 0xff800000, 0x3800014}, | ||
| 5388 | {0x3800000, 0xff7fffff, 0x966320b, 0xff7fffff, 0x3800010}, | ||
| 5389 | {0x3800000, 0xff7fffff, 0xb26bddee, 0xff800000, 0x3800014}, | ||
| 5390 | {0x3800000, 0xff7fffff, 0xb5c8e5d3, 0xff800000, 0x3800014}, | ||
| 5391 | {0x3800000, 0xff7fffff, 0x317285d3, 0xff7fffff, 0x3800010}, | ||
| 5392 | {0x3800000, 0xff7fffff, 0x3c9623b1, 0xff7fffff, 0x3800010}, | ||
| 5393 | {0x3800000, 0xff7fffff, 0x51fd2c7c, 0xff7fffff, 0x3800010}, | ||
| 5394 | {0x3800000, 0xff7fffff, 0x7b906a6c, 0xff7edf2b, 0x3800010}, | ||
| 5395 | {0x3800000, 0xff800000, 0x0, 0xff800000, 0x3800000}, | ||
| 5396 | {0x3800000, 0xff800000, 0x1, 0xff800000, 0x3800080}, | ||
| 5397 | {0x3800000, 0xff800000, 0x76, 0xff800000, 0x3800080}, | ||
| 5398 | {0x3800000, 0xff800000, 0x2b94, 0xff800000, 0x3800080}, | ||
| 5399 | {0x3800000, 0xff800000, 0x636d24, 0xff800000, 0x3800080}, | ||
| 5400 | {0x3800000, 0xff800000, 0x7fffff, 0xff800000, 0x3800080}, | ||
| 5401 | {0x3800000, 0xff800000, 0x800000, 0xff800000, 0x3800000}, | ||
| 5402 | {0x3800000, 0xff800000, 0x800002, 0xff800000, 0x3800000}, | ||
| 5403 | {0x3800000, 0xff800000, 0x1398437, 0xff800000, 0x3800000}, | ||
| 5404 | {0x3800000, 0xff800000, 0xba98d27, 0xff800000, 0x3800000}, | ||
| 5405 | {0x3800000, 0xff800000, 0xba98d7a, 0xff800000, 0x3800000}, | ||
| 5406 | {0x3800000, 0xff800000, 0x751f853a, 0xff800000, 0x3800000}, | ||
| 5407 | {0x3800000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3800000}, | ||
| 5408 | {0x3800000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3800000}, | ||
| 5409 | {0x3800000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3800001}, | ||
| 5410 | {0x3800000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5411 | {0x3800000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5412 | {0x3800000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5413 | {0x3800000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5414 | {0x3800000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5415 | {0x3800000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5416 | {0x3800000, 0xff800000, 0x80000000, 0xff800000, 0x3800000}, | ||
| 5417 | {0x3800000, 0xff800000, 0x80000001, 0xff800000, 0x3800080}, | ||
| 5418 | {0x3800000, 0xff800000, 0x80000076, 0xff800000, 0x3800080}, | ||
| 5419 | {0x3800000, 0xff800000, 0x80002b94, 0xff800000, 0x3800080}, | ||
| 5420 | {0x3800000, 0xff800000, 0x80636d24, 0xff800000, 0x3800080}, | ||
| 5421 | {0x3800000, 0xff800000, 0x807fffff, 0xff800000, 0x3800080}, | ||
| 5422 | {0x3800000, 0xff800000, 0x80800000, 0xff800000, 0x3800000}, | ||
| 5423 | {0x3800000, 0xff800000, 0x80800002, 0xff800000, 0x3800000}, | ||
| 5424 | {0x3800000, 0xff800000, 0x81398437, 0xff800000, 0x3800000}, | ||
| 5425 | {0x3800000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3800000}, | ||
| 5426 | {0x3800000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3800000}, | ||
| 5427 | {0x3800000, 0xff800000, 0xf51f853a, 0xff800000, 0x3800000}, | ||
| 5428 | {0x3800000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3800000}, | ||
| 5429 | {0x3800000, 0xff800000, 0xff7fffff, 0xff800000, 0x3800000}, | ||
| 5430 | {0x3800000, 0xff800000, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5431 | {0x3800000, 0xff800000, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5432 | {0x3800000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5433 | {0x3800000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5434 | {0x3800000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5435 | {0x3800000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5436 | {0x3800000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5437 | {0x3800000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3800000}, | ||
| 5438 | {0x3800000, 0xff800000, 0xe73a5134, 0xff800000, 0x3800000}, | ||
| 5439 | {0x3800000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3800000}, | ||
| 5440 | {0x3800000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3800000}, | ||
| 5441 | {0x3800000, 0xff800000, 0x9503366, 0xff800000, 0x3800000}, | ||
| 5442 | {0x3800000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3800000}, | ||
| 5443 | {0x3800000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3800000}, | ||
| 5444 | {0x3800000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3800000}, | ||
| 5445 | {0x3800000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3800000}, | ||
| 5446 | {0x3800000, 0xff800000, 0x966320b, 0xff800000, 0x3800000}, | ||
| 5447 | {0x3800000, 0xff800000, 0xb26bddee, 0xff800000, 0x3800000}, | ||
| 5448 | {0x3800000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3800000}, | ||
| 5449 | {0x3800000, 0xff800000, 0x317285d3, 0xff800000, 0x3800000}, | ||
| 5450 | {0x3800000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3800000}, | ||
| 5451 | {0x3800000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3800000}, | ||
| 5452 | {0x3800000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3800000}, | ||
| 5453 | {0x3800000, 0xff800001, 0x0, 0x7fc00000, 0x3800001}, | ||
| 5454 | {0x3800000, 0xff800001, 0x1, 0x7fc00000, 0x3800081}, | ||
| 5455 | {0x3800000, 0xff800001, 0x76, 0x7fc00000, 0x3800081}, | ||
| 5456 | {0x3800000, 0xff800001, 0x2b94, 0x7fc00000, 0x3800081}, | ||
| 5457 | {0x3800000, 0xff800001, 0x636d24, 0x7fc00000, 0x3800081}, | ||
| 5458 | {0x3800000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3800081}, | ||
| 5459 | {0x3800000, 0xff800001, 0x800000, 0x7fc00000, 0x3800001}, | ||
| 5460 | {0x3800000, 0xff800001, 0x800002, 0x7fc00000, 0x3800001}, | ||
| 5461 | {0x3800000, 0xff800001, 0x1398437, 0x7fc00000, 0x3800001}, | ||
| 5462 | {0x3800000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3800001}, | ||
| 5463 | {0x3800000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3800001}, | ||
| 5464 | {0x3800000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3800001}, | ||
| 5465 | {0x3800000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3800001}, | ||
| 5466 | {0x3800000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3800001}, | ||
| 5467 | {0x3800000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3800001}, | ||
| 5468 | {0x3800000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5469 | {0x3800000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5470 | {0x3800000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5471 | {0x3800000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3800001}, | ||
| 5472 | {0x3800000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3800001}, | ||
| 5473 | {0x3800000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3800001}, | ||
| 5474 | {0x3800000, 0xff800001, 0x80000000, 0x7fc00000, 0x3800001}, | ||
| 5475 | {0x3800000, 0xff800001, 0x80000001, 0x7fc00000, 0x3800081}, | ||
| 5476 | {0x3800000, 0xff800001, 0x80000076, 0x7fc00000, 0x3800081}, | ||
| 5477 | {0x3800000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3800081}, | ||
| 5478 | {0x3800000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3800081}, | ||
| 5479 | {0x3800000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3800081}, | ||
| 5480 | {0x3800000, 0xff800001, 0x80800000, 0x7fc00000, 0x3800001}, | ||
| 5481 | {0x3800000, 0xff800001, 0x80800002, 0x7fc00000, 0x3800001}, | ||
| 5482 | {0x3800000, 0xff800001, 0x81398437, 0x7fc00000, 0x3800001}, | ||
| 5483 | {0x3800000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3800001}, | ||
| 5484 | {0x3800000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3800001}, | ||
| 5485 | {0x3800000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3800001}, | ||
| 5486 | {0x3800000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3800001}, | ||
| 5487 | {0x3800000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3800001}, | ||
| 5488 | {0x3800000, 0xff800001, 0xff800000, 0x7fc00000, 0x3800001}, | ||
| 5489 | {0x3800000, 0xff800001, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5490 | {0x3800000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5491 | {0x3800000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5492 | {0x3800000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3800001}, | ||
| 5493 | {0x3800000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3800001}, | ||
| 5494 | {0x3800000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3800001}, | ||
| 5495 | {0x3800000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3800001}, | ||
| 5496 | {0x3800000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3800001}, | ||
| 5497 | {0x3800000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3800001}, | ||
| 5498 | {0x3800000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3800001}, | ||
| 5499 | {0x3800000, 0xff800001, 0x9503366, 0x7fc00000, 0x3800001}, | ||
| 5500 | {0x3800000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3800001}, | ||
| 5501 | {0x3800000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3800001}, | ||
| 5502 | {0x3800000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3800001}, | ||
| 5503 | {0x3800000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3800001}, | ||
| 5504 | {0x3800000, 0xff800001, 0x966320b, 0x7fc00000, 0x3800001}, | ||
| 5505 | {0x3800000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3800001}, | ||
| 5506 | {0x3800000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, | ||
| 5507 | {0x3800000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3800001}, | ||
| 5508 | {0x3800000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3800001}, | ||
| 5509 | {0x3800000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3800001}, | ||
| 5510 | {0x3800000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3800001}, | ||
| 5511 | {0x3800000, 0xff984a37, 0x0, 0x7fc00000, 0x3800001}, | ||
| 5512 | {0x3800000, 0xff984a37, 0x1, 0x7fc00000, 0x3800081}, | ||
| 5513 | {0x3800000, 0xff984a37, 0x76, 0x7fc00000, 0x3800081}, | ||
| 5514 | {0x3800000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3800081}, | ||
| 5515 | {0x3800000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3800081}, | ||
| 5516 | {0x3800000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3800081}, | ||
| 5517 | {0x3800000, 0xff984a37, 0x800000, 0x7fc00000, 0x3800001}, | ||
| 5518 | {0x3800000, 0xff984a37, 0x800002, 0x7fc00000, 0x3800001}, | ||
| 5519 | {0x3800000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3800001}, | ||
| 5520 | {0x3800000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3800001}, | ||
| 5521 | {0x3800000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3800001}, | ||
| 5522 | {0x3800000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3800001}, | ||
| 5523 | {0x3800000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3800001}, | ||
| 5524 | {0x3800000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3800001}, | ||
| 5525 | {0x3800000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3800001}, | ||
| 5526 | {0x3800000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5527 | {0x3800000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5528 | {0x3800000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5529 | {0x3800000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3800001}, | ||
| 5530 | {0x3800000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3800001}, | ||
| 5531 | {0x3800000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3800001}, | ||
| 5532 | {0x3800000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3800001}, | ||
| 5533 | {0x3800000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3800081}, | ||
| 5534 | {0x3800000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3800081}, | ||
| 5535 | {0x3800000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3800081}, | ||
| 5536 | {0x3800000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3800081}, | ||
| 5537 | {0x3800000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3800081}, | ||
| 5538 | {0x3800000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3800001}, | ||
| 5539 | {0x3800000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3800001}, | ||
| 5540 | {0x3800000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3800001}, | ||
| 5541 | {0x3800000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3800001}, | ||
| 5542 | {0x3800000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3800001}, | ||
| 5543 | {0x3800000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3800001}, | ||
| 5544 | {0x3800000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3800001}, | ||
| 5545 | {0x3800000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3800001}, | ||
| 5546 | {0x3800000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3800001}, | ||
| 5547 | {0x3800000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5548 | {0x3800000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5549 | {0x3800000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5550 | {0x3800000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3800001}, | ||
| 5551 | {0x3800000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3800001}, | ||
| 5552 | {0x3800000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3800001}, | ||
| 5553 | {0x3800000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3800001}, | ||
| 5554 | {0x3800000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3800001}, | ||
| 5555 | {0x3800000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3800001}, | ||
| 5556 | {0x3800000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3800001}, | ||
| 5557 | {0x3800000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3800001}, | ||
| 5558 | {0x3800000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3800001}, | ||
| 5559 | {0x3800000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3800001}, | ||
| 5560 | {0x3800000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3800001}, | ||
| 5561 | {0x3800000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3800001}, | ||
| 5562 | {0x3800000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3800001}, | ||
| 5563 | {0x3800000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3800001}, | ||
| 5564 | {0x3800000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, | ||
| 5565 | {0x3800000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3800001}, | ||
| 5566 | {0x3800000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3800001}, | ||
| 5567 | {0x3800000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3800001}, | ||
| 5568 | {0x3800000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3800001}, | ||
| 5569 | {0x3800000, 0xffbfffff, 0x0, 0x7fc00000, 0x3800001}, | ||
| 5570 | {0x3800000, 0xffbfffff, 0x1, 0x7fc00000, 0x3800081}, | ||
| 5571 | {0x3800000, 0xffbfffff, 0x76, 0x7fc00000, 0x3800081}, | ||
| 5572 | {0x3800000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3800081}, | ||
| 5573 | {0x3800000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3800081}, | ||
| 5574 | {0x3800000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3800081}, | ||
| 5575 | {0x3800000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3800001}, | ||
| 5576 | {0x3800000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3800001}, | ||
| 5577 | {0x3800000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3800001}, | ||
| 5578 | {0x3800000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3800001}, | ||
| 5579 | {0x3800000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3800001}, | ||
| 5580 | {0x3800000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3800001}, | ||
| 5581 | {0x3800000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3800001}, | ||
| 5582 | {0x3800000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3800001}, | ||
| 5583 | {0x3800000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3800001}, | ||
| 5584 | {0x3800000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5585 | {0x3800000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5586 | {0x3800000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5587 | {0x3800000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3800001}, | ||
| 5588 | {0x3800000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3800001}, | ||
| 5589 | {0x3800000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3800001}, | ||
| 5590 | {0x3800000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3800001}, | ||
| 5591 | {0x3800000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3800081}, | ||
| 5592 | {0x3800000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3800081}, | ||
| 5593 | {0x3800000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3800081}, | ||
| 5594 | {0x3800000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3800081}, | ||
| 5595 | {0x3800000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3800081}, | ||
| 5596 | {0x3800000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3800001}, | ||
| 5597 | {0x3800000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3800001}, | ||
| 5598 | {0x3800000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3800001}, | ||
| 5599 | {0x3800000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3800001}, | ||
| 5600 | {0x3800000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3800001}, | ||
| 5601 | {0x3800000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3800001}, | ||
| 5602 | {0x3800000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3800001}, | ||
| 5603 | {0x3800000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3800001}, | ||
| 5604 | {0x3800000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3800001}, | ||
| 5605 | {0x3800000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5606 | {0x3800000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5607 | {0x3800000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5608 | {0x3800000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3800001}, | ||
| 5609 | {0x3800000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3800001}, | ||
| 5610 | {0x3800000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3800001}, | ||
| 5611 | {0x3800000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3800001}, | ||
| 5612 | {0x3800000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3800001}, | ||
| 5613 | {0x3800000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3800001}, | ||
| 5614 | {0x3800000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3800001}, | ||
| 5615 | {0x3800000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3800001}, | ||
| 5616 | {0x3800000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3800001}, | ||
| 5617 | {0x3800000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3800001}, | ||
| 5618 | {0x3800000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3800001}, | ||
| 5619 | {0x3800000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3800001}, | ||
| 5620 | {0x3800000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3800001}, | ||
| 5621 | {0x3800000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3800001}, | ||
| 5622 | {0x3800000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, | ||
| 5623 | {0x3800000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3800001}, | ||
| 5624 | {0x3800000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3800001}, | ||
| 5625 | {0x3800000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3800001}, | ||
| 5626 | {0x3800000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3800001}, | ||
| 5627 | {0x3800000, 0xffc00000, 0x0, 0x7fc00000, 0x3800000}, | ||
| 5628 | {0x3800000, 0xffc00000, 0x1, 0x7fc00000, 0x3800080}, | ||
| 5629 | {0x3800000, 0xffc00000, 0x76, 0x7fc00000, 0x3800080}, | ||
| 5630 | {0x3800000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3800080}, | ||
| 5631 | {0x3800000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3800080}, | ||
| 5632 | {0x3800000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3800080}, | ||
| 5633 | {0x3800000, 0xffc00000, 0x800000, 0x7fc00000, 0x3800000}, | ||
| 5634 | {0x3800000, 0xffc00000, 0x800002, 0x7fc00000, 0x3800000}, | ||
| 5635 | {0x3800000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3800000}, | ||
| 5636 | {0x3800000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3800000}, | ||
| 5637 | {0x3800000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3800000}, | ||
| 5638 | {0x3800000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3800000}, | ||
| 5639 | {0x3800000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3800000}, | ||
| 5640 | {0x3800000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3800000}, | ||
| 5641 | {0x3800000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3800000}, | ||
| 5642 | {0x3800000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5643 | {0x3800000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5644 | {0x3800000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5645 | {0x3800000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5646 | {0x3800000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5647 | {0x3800000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5648 | {0x3800000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3800000}, | ||
| 5649 | {0x3800000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3800080}, | ||
| 5650 | {0x3800000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3800080}, | ||
| 5651 | {0x3800000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3800080}, | ||
| 5652 | {0x3800000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3800080}, | ||
| 5653 | {0x3800000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3800080}, | ||
| 5654 | {0x3800000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3800000}, | ||
| 5655 | {0x3800000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3800000}, | ||
| 5656 | {0x3800000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3800000}, | ||
| 5657 | {0x3800000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3800000}, | ||
| 5658 | {0x3800000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3800000}, | ||
| 5659 | {0x3800000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3800000}, | ||
| 5660 | {0x3800000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3800000}, | ||
| 5661 | {0x3800000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3800000}, | ||
| 5662 | {0x3800000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3800000}, | ||
| 5663 | {0x3800000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5664 | {0x3800000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5665 | {0x3800000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5666 | {0x3800000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5667 | {0x3800000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5668 | {0x3800000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5669 | {0x3800000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3800000}, | ||
| 5670 | {0x3800000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3800000}, | ||
| 5671 | {0x3800000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3800000}, | ||
| 5672 | {0x3800000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3800000}, | ||
| 5673 | {0x3800000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3800000}, | ||
| 5674 | {0x3800000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3800000}, | ||
| 5675 | {0x3800000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3800000}, | ||
| 5676 | {0x3800000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3800000}, | ||
| 5677 | {0x3800000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3800000}, | ||
| 5678 | {0x3800000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3800000}, | ||
| 5679 | {0x3800000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3800000}, | ||
| 5680 | {0x3800000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, | ||
| 5681 | {0x3800000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3800000}, | ||
| 5682 | {0x3800000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3800000}, | ||
| 5683 | {0x3800000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3800000}, | ||
| 5684 | {0x3800000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3800000}, | ||
| 5685 | {0x3800000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3800000}, | ||
| 5686 | {0x3800000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3800080}, | ||
| 5687 | {0x3800000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3800080}, | ||
| 5688 | {0x3800000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3800080}, | ||
| 5689 | {0x3800000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3800080}, | ||
| 5690 | {0x3800000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3800080}, | ||
| 5691 | {0x3800000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3800000}, | ||
| 5692 | {0x3800000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3800000}, | ||
| 5693 | {0x3800000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3800000}, | ||
| 5694 | {0x3800000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3800000}, | ||
| 5695 | {0x3800000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3800000}, | ||
| 5696 | {0x3800000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3800000}, | ||
| 5697 | {0x3800000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3800000}, | ||
| 5698 | {0x3800000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3800000}, | ||
| 5699 | {0x3800000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3800000}, | ||
| 5700 | {0x3800000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5701 | {0x3800000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5702 | {0x3800000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5703 | {0x3800000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5704 | {0x3800000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5705 | {0x3800000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5706 | {0x3800000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3800000}, | ||
| 5707 | {0x3800000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3800080}, | ||
| 5708 | {0x3800000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3800080}, | ||
| 5709 | {0x3800000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3800080}, | ||
| 5710 | {0x3800000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3800080}, | ||
| 5711 | {0x3800000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3800080}, | ||
| 5712 | {0x3800000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3800000}, | ||
| 5713 | {0x3800000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3800000}, | ||
| 5714 | {0x3800000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3800000}, | ||
| 5715 | {0x3800000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3800000}, | ||
| 5716 | {0x3800000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3800000}, | ||
| 5717 | {0x3800000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3800000}, | ||
| 5718 | {0x3800000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3800000}, | ||
| 5719 | {0x3800000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3800000}, | ||
| 5720 | {0x3800000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3800000}, | ||
| 5721 | {0x3800000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5722 | {0x3800000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5723 | {0x3800000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5724 | {0x3800000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5725 | {0x3800000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5726 | {0x3800000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5727 | {0x3800000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3800000}, | ||
| 5728 | {0x3800000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3800000}, | ||
| 5729 | {0x3800000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3800000}, | ||
| 5730 | {0x3800000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3800000}, | ||
| 5731 | {0x3800000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3800000}, | ||
| 5732 | {0x3800000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3800000}, | ||
| 5733 | {0x3800000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3800000}, | ||
| 5734 | {0x3800000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3800000}, | ||
| 5735 | {0x3800000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3800000}, | ||
| 5736 | {0x3800000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3800000}, | ||
| 5737 | {0x3800000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3800000}, | ||
| 5738 | {0x3800000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, | ||
| 5739 | {0x3800000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3800000}, | ||
| 5740 | {0x3800000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3800000}, | ||
| 5741 | {0x3800000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3800000}, | ||
| 5742 | {0x3800000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3800000}, | ||
| 5743 | {0x3800000, 0xffffffff, 0x0, 0x7fc00000, 0x3800000}, | ||
| 5744 | {0x3800000, 0xffffffff, 0x1, 0x7fc00000, 0x3800080}, | ||
| 5745 | {0x3800000, 0xffffffff, 0x76, 0x7fc00000, 0x3800080}, | ||
| 5746 | {0x3800000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3800080}, | ||
| 5747 | {0x3800000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3800080}, | ||
| 5748 | {0x3800000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3800080}, | ||
| 5749 | {0x3800000, 0xffffffff, 0x800000, 0x7fc00000, 0x3800000}, | ||
| 5750 | {0x3800000, 0xffffffff, 0x800002, 0x7fc00000, 0x3800000}, | ||
| 5751 | {0x3800000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3800000}, | ||
| 5752 | {0x3800000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3800000}, | ||
| 5753 | {0x3800000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3800000}, | ||
| 5754 | {0x3800000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3800000}, | ||
| 5755 | {0x3800000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3800000}, | ||
| 5756 | {0x3800000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3800000}, | ||
| 5757 | {0x3800000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3800000}, | ||
| 5758 | {0x3800000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5759 | {0x3800000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5760 | {0x3800000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5761 | {0x3800000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5762 | {0x3800000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5763 | {0x3800000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5764 | {0x3800000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3800000}, | ||
| 5765 | {0x3800000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3800080}, | ||
| 5766 | {0x3800000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3800080}, | ||
| 5767 | {0x3800000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3800080}, | ||
| 5768 | {0x3800000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3800080}, | ||
| 5769 | {0x3800000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3800080}, | ||
| 5770 | {0x3800000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3800000}, | ||
| 5771 | {0x3800000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3800000}, | ||
| 5772 | {0x3800000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3800000}, | ||
| 5773 | {0x3800000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3800000}, | ||
| 5774 | {0x3800000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3800000}, | ||
| 5775 | {0x3800000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3800000}, | ||
| 5776 | {0x3800000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3800000}, | ||
| 5777 | {0x3800000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3800000}, | ||
| 5778 | {0x3800000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3800000}, | ||
| 5779 | {0x3800000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5780 | {0x3800000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5781 | {0x3800000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5782 | {0x3800000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5783 | {0x3800000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5784 | {0x3800000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5785 | {0x3800000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3800000}, | ||
| 5786 | {0x3800000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3800000}, | ||
| 5787 | {0x3800000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3800000}, | ||
| 5788 | {0x3800000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3800000}, | ||
| 5789 | {0x3800000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3800000}, | ||
| 5790 | {0x3800000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3800000}, | ||
| 5791 | {0x3800000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3800000}, | ||
| 5792 | {0x3800000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3800000}, | ||
| 5793 | {0x3800000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3800000}, | ||
| 5794 | {0x3800000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3800000}, | ||
| 5795 | {0x3800000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3800000}, | ||
| 5796 | {0x3800000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, | ||
| 5797 | {0x3800000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3800000}, | ||
| 5798 | {0x3800000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3800000}, | ||
| 5799 | {0x3800000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3800000}, | ||
| 5800 | {0x3800000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3800000}, | ||
| 5801 | {0x3800000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3800000}, | ||
| 5802 | {0x3800000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3800080}, | ||
| 5803 | {0x3800000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3800080}, | ||
| 5804 | {0x3800000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3800080}, | ||
| 5805 | {0x3800000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3800080}, | ||
| 5806 | {0x3800000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3800080}, | ||
| 5807 | {0x3800000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3800010}, | ||
| 5808 | {0x3800000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3800010}, | ||
| 5809 | {0x3800000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3800010}, | ||
| 5810 | {0x3800000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3800010}, | ||
| 5811 | {0x3800000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3800010}, | ||
| 5812 | {0x3800000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 5813 | {0x3800000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 5814 | {0x3800000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 5815 | {0x3800000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5816 | {0x3800000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5817 | {0x3800000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5818 | {0x3800000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5819 | {0x3800000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5820 | {0x3800000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5821 | {0x3800000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5822 | {0x3800000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3800000}, | ||
| 5823 | {0x3800000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3800080}, | ||
| 5824 | {0x3800000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3800080}, | ||
| 5825 | {0x3800000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3800080}, | ||
| 5826 | {0x3800000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3800080}, | ||
| 5827 | {0x3800000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3800080}, | ||
| 5828 | {0x3800000, 0x4f3495cb, 0x80800000, 0x4f3495ca, 0x3800010}, | ||
| 5829 | {0x3800000, 0x4f3495cb, 0x80800002, 0x4f3495ca, 0x3800010}, | ||
| 5830 | {0x3800000, 0x4f3495cb, 0x81398437, 0x4f3495ca, 0x3800010}, | ||
| 5831 | {0x3800000, 0x4f3495cb, 0x8ba98d27, 0x4f3495ca, 0x3800010}, | ||
| 5832 | {0x3800000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495ca, 0x3800010}, | ||
| 5833 | {0x3800000, 0x4f3495cb, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 5834 | {0x3800000, 0x4f3495cb, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 5835 | {0x3800000, 0x4f3495cb, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 5836 | {0x3800000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5837 | {0x3800000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5838 | {0x3800000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5839 | {0x3800000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5840 | {0x3800000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5841 | {0x3800000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5842 | {0x3800000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5843 | {0x3800000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3800000}, | ||
| 5844 | {0x3800000, 0x4f3495cb, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 5845 | {0x3800000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 5846 | {0x3800000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 5847 | {0x3800000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3800010}, | ||
| 5848 | {0x3800000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495ca, 0x3800010}, | ||
| 5849 | {0x3800000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 5850 | {0x3800000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 5851 | {0x3800000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495ca, 0x3800010}, | ||
| 5852 | {0x3800000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3800010}, | ||
| 5853 | {0x3800000, 0x4f3495cb, 0xb26bddee, 0x4f3495ca, 0x3800010}, | ||
| 5854 | {0x3800000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495ca, 0x3800010}, | ||
| 5855 | {0x3800000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3800010}, | ||
| 5856 | {0x3800000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3800010}, | ||
| 5857 | {0x3800000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3800010}, | ||
| 5858 | {0x3800000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 5859 | {0x3800000, 0xe73a5134, 0x0, 0xe73a5134, 0x3800000}, | ||
| 5860 | {0x3800000, 0xe73a5134, 0x1, 0xe73a5134, 0x3800080}, | ||
| 5861 | {0x3800000, 0xe73a5134, 0x76, 0xe73a5134, 0x3800080}, | ||
| 5862 | {0x3800000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3800080}, | ||
| 5863 | {0x3800000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3800080}, | ||
| 5864 | {0x3800000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3800080}, | ||
| 5865 | {0x3800000, 0xe73a5134, 0x800000, 0xe73a5134, 0x3800010}, | ||
| 5866 | {0x3800000, 0xe73a5134, 0x800002, 0xe73a5134, 0x3800010}, | ||
| 5867 | {0x3800000, 0xe73a5134, 0x1398437, 0xe73a5134, 0x3800010}, | ||
| 5868 | {0x3800000, 0xe73a5134, 0xba98d27, 0xe73a5134, 0x3800010}, | ||
| 5869 | {0x3800000, 0xe73a5134, 0xba98d7a, 0xe73a5134, 0x3800010}, | ||
| 5870 | {0x3800000, 0xe73a5134, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 5871 | {0x3800000, 0xe73a5134, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 5872 | {0x3800000, 0xe73a5134, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 5873 | {0x3800000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5874 | {0x3800000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5875 | {0x3800000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5876 | {0x3800000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5877 | {0x3800000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5878 | {0x3800000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5879 | {0x3800000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5880 | {0x3800000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3800000}, | ||
| 5881 | {0x3800000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3800080}, | ||
| 5882 | {0x3800000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3800080}, | ||
| 5883 | {0x3800000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3800080}, | ||
| 5884 | {0x3800000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3800080}, | ||
| 5885 | {0x3800000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3800080}, | ||
| 5886 | {0x3800000, 0xe73a5134, 0x80800000, 0xe73a5135, 0x3800010}, | ||
| 5887 | {0x3800000, 0xe73a5134, 0x80800002, 0xe73a5135, 0x3800010}, | ||
| 5888 | {0x3800000, 0xe73a5134, 0x81398437, 0xe73a5135, 0x3800010}, | ||
| 5889 | {0x3800000, 0xe73a5134, 0x8ba98d27, 0xe73a5135, 0x3800010}, | ||
| 5890 | {0x3800000, 0xe73a5134, 0x8ba98d7a, 0xe73a5135, 0x3800010}, | ||
| 5891 | {0x3800000, 0xe73a5134, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 5892 | {0x3800000, 0xe73a5134, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 5893 | {0x3800000, 0xe73a5134, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 5894 | {0x3800000, 0xe73a5134, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5895 | {0x3800000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5896 | {0x3800000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5897 | {0x3800000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5898 | {0x3800000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5899 | {0x3800000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5900 | {0x3800000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5901 | {0x3800000, 0xe73a5134, 0x4f3495cb, 0xe73a5134, 0x3800010}, | ||
| 5902 | {0x3800000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3800000}, | ||
| 5903 | {0x3800000, 0xe73a5134, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 5904 | {0x3800000, 0xe73a5134, 0x6164bd6c, 0xe73a42e9, 0x3800010}, | ||
| 5905 | {0x3800000, 0xe73a5134, 0x9503366, 0xe73a5134, 0x3800010}, | ||
| 5906 | {0x3800000, 0xe73a5134, 0xbf5a97c9, 0xe73a5135, 0x3800010}, | ||
| 5907 | {0x3800000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3800000}, | ||
| 5908 | {0x3800000, 0xe73a5134, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 5909 | {0x3800000, 0xe73a5134, 0xaab4d7d8, 0xe73a5135, 0x3800010}, | ||
| 5910 | {0x3800000, 0xe73a5134, 0x966320b, 0xe73a5134, 0x3800010}, | ||
| 5911 | {0x3800000, 0xe73a5134, 0xb26bddee, 0xe73a5135, 0x3800010}, | ||
| 5912 | {0x3800000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5135, 0x3800010}, | ||
| 5913 | {0x3800000, 0xe73a5134, 0x317285d3, 0xe73a5134, 0x3800010}, | ||
| 5914 | {0x3800000, 0xe73a5134, 0x3c9623b1, 0xe73a5134, 0x3800010}, | ||
| 5915 | {0x3800000, 0xe73a5134, 0x51fd2c7c, 0xe73a5134, 0x3800010}, | ||
| 5916 | {0x3800000, 0xe73a5134, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 5917 | {0x3800000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3800000}, | ||
| 5918 | {0x3800000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3800080}, | ||
| 5919 | {0x3800000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3800080}, | ||
| 5920 | {0x3800000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3800080}, | ||
| 5921 | {0x3800000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3800080}, | ||
| 5922 | {0x3800000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3800080}, | ||
| 5923 | {0x3800000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3800010}, | ||
| 5924 | {0x3800000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3800010}, | ||
| 5925 | {0x3800000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3800010}, | ||
| 5926 | {0x3800000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3800010}, | ||
| 5927 | {0x3800000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3800010}, | ||
| 5928 | {0x3800000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3800010}, | ||
| 5929 | {0x3800000, 0x7c994e9e, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, | ||
| 5930 | {0x3800000, 0x7c994e9e, 0x7f7fffff, 0x7f7fffff, 0x3800014}, | ||
| 5931 | {0x3800000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5932 | {0x3800000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5933 | {0x3800000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5934 | {0x3800000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5935 | {0x3800000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5936 | {0x3800000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5937 | {0x3800000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5938 | {0x3800000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3800000}, | ||
| 5939 | {0x3800000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3800080}, | ||
| 5940 | {0x3800000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3800080}, | ||
| 5941 | {0x3800000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3800080}, | ||
| 5942 | {0x3800000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3800080}, | ||
| 5943 | {0x3800000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3800080}, | ||
| 5944 | {0x3800000, 0x7c994e9e, 0x80800000, 0x7c994e9d, 0x3800010}, | ||
| 5945 | {0x3800000, 0x7c994e9e, 0x80800002, 0x7c994e9d, 0x3800010}, | ||
| 5946 | {0x3800000, 0x7c994e9e, 0x81398437, 0x7c994e9d, 0x3800010}, | ||
| 5947 | {0x3800000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9d, 0x3800010}, | ||
| 5948 | {0x3800000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9d, 0x3800010}, | ||
| 5949 | {0x3800000, 0x7c994e9e, 0xf51f853a, 0x7c994d5e, 0x3800010}, | ||
| 5950 | {0x3800000, 0x7c994e9e, 0xff7ffff0, 0xff7b357c, 0x3800010}, | ||
| 5951 | {0x3800000, 0x7c994e9e, 0xff7fffff, 0xff7b358b, 0x3800010}, | ||
| 5952 | {0x3800000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3800000}, | ||
| 5953 | {0x3800000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 5954 | {0x3800000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 5955 | {0x3800000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 5956 | {0x3800000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 5957 | {0x3800000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5958 | {0x3800000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 5959 | {0x3800000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3800010}, | ||
| 5960 | {0x3800000, 0x7c994e9e, 0xe73a5134, 0x7c994e9d, 0x3800010}, | ||
| 5961 | {0x3800000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3800000}, | ||
| 5962 | {0x3800000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3800010}, | ||
| 5963 | {0x3800000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3800010}, | ||
| 5964 | {0x3800000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9d, 0x3800010}, | ||
| 5965 | {0x3800000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9d, 0x3800010}, | ||
| 5966 | {0x3800000, 0x7c994e9e, 0x77f31e2f, 0x7c998b65, 0x3800010}, | ||
| 5967 | {0x3800000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9d, 0x3800010}, | ||
| 5968 | {0x3800000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3800010}, | ||
| 5969 | {0x3800000, 0x7c994e9e, 0xb26bddee, 0x7c994e9d, 0x3800010}, | ||
| 5970 | {0x3800000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9d, 0x3800010}, | ||
| 5971 | {0x3800000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3800010}, | ||
| 5972 | {0x3800000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3800010}, | ||
| 5973 | {0x3800000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3800010}, | ||
| 5974 | {0x3800000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3800000}, | ||
| 5975 | {0x3800000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3800000}, | ||
| 5976 | {0x3800000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3800080}, | ||
| 5977 | {0x3800000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3800080}, | ||
| 5978 | {0x3800000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3800080}, | ||
| 5979 | {0x3800000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3800080}, | ||
| 5980 | {0x3800000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3800080}, | ||
| 5981 | {0x3800000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3800010}, | ||
| 5982 | {0x3800000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3800010}, | ||
| 5983 | {0x3800000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3800010}, | ||
| 5984 | {0x3800000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3800010}, | ||
| 5985 | {0x3800000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3800010}, | ||
| 5986 | {0x3800000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 5987 | {0x3800000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 5988 | {0x3800000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 5989 | {0x3800000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 5990 | {0x3800000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 5991 | {0x3800000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 5992 | {0x3800000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 5993 | {0x3800000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 5994 | {0x3800000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 5995 | {0x3800000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 5996 | {0x3800000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3800000}, | ||
| 5997 | {0x3800000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3800080}, | ||
| 5998 | {0x3800000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3800080}, | ||
| 5999 | {0x3800000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3800080}, | ||
| 6000 | {0x3800000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3800080}, | ||
| 6001 | {0x3800000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3800080}, | ||
| 6002 | {0x3800000, 0x6164bd6c, 0x80800000, 0x6164bd6b, 0x3800010}, | ||
| 6003 | {0x3800000, 0x6164bd6c, 0x80800002, 0x6164bd6b, 0x3800010}, | ||
| 6004 | {0x3800000, 0x6164bd6c, 0x81398437, 0x6164bd6b, 0x3800010}, | ||
| 6005 | {0x3800000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6b, 0x3800010}, | ||
| 6006 | {0x3800000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6b, 0x3800010}, | ||
| 6007 | {0x3800000, 0x6164bd6c, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 6008 | {0x3800000, 0x6164bd6c, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 6009 | {0x3800000, 0x6164bd6c, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 6010 | {0x3800000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6011 | {0x3800000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6012 | {0x3800000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6013 | {0x3800000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6014 | {0x3800000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6015 | {0x3800000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6016 | {0x3800000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6017 | {0x3800000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3800010}, | ||
| 6018 | {0x3800000, 0x6164bd6c, 0xe73a5134, 0xe73a42e9, 0x3800010}, | ||
| 6019 | {0x3800000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 6020 | {0x3800000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3800000}, | ||
| 6021 | {0x3800000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3800010}, | ||
| 6022 | {0x3800000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6b, 0x3800010}, | ||
| 6023 | {0x3800000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7d, 0x3800010}, | ||
| 6024 | {0x3800000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 6025 | {0x3800000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6b, 0x3800010}, | ||
| 6026 | {0x3800000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3800010}, | ||
| 6027 | {0x3800000, 0x6164bd6c, 0xb26bddee, 0x6164bd6b, 0x3800010}, | ||
| 6028 | {0x3800000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6b, 0x3800010}, | ||
| 6029 | {0x3800000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3800010}, | ||
| 6030 | {0x3800000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3800010}, | ||
| 6031 | {0x3800000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3800010}, | ||
| 6032 | {0x3800000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 6033 | {0x3800000, 0x9503366, 0x0, 0x9503366, 0x3800000}, | ||
| 6034 | {0x3800000, 0x9503366, 0x1, 0x9503366, 0x3800080}, | ||
| 6035 | {0x3800000, 0x9503366, 0x76, 0x9503366, 0x3800080}, | ||
| 6036 | {0x3800000, 0x9503366, 0x2b94, 0x9503366, 0x3800080}, | ||
| 6037 | {0x3800000, 0x9503366, 0x636d24, 0x9503366, 0x3800080}, | ||
| 6038 | {0x3800000, 0x9503366, 0x7fffff, 0x9503366, 0x3800080}, | ||
| 6039 | {0x3800000, 0x9503366, 0x800000, 0x95033a6, 0x3800000}, | ||
| 6040 | {0x3800000, 0x9503366, 0x800002, 0x95033a6, 0x3800010}, | ||
| 6041 | {0x3800000, 0x9503366, 0x1398437, 0x950341f, 0x3800010}, | ||
| 6042 | {0x3800000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3800010}, | ||
| 6043 | {0x3800000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3800010}, | ||
| 6044 | {0x3800000, 0x9503366, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 6045 | {0x3800000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 6046 | {0x3800000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 6047 | {0x3800000, 0x9503366, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6048 | {0x3800000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6049 | {0x3800000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6050 | {0x3800000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6051 | {0x3800000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6052 | {0x3800000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6053 | {0x3800000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6054 | {0x3800000, 0x9503366, 0x80000000, 0x9503366, 0x3800000}, | ||
| 6055 | {0x3800000, 0x9503366, 0x80000001, 0x9503366, 0x3800080}, | ||
| 6056 | {0x3800000, 0x9503366, 0x80000076, 0x9503366, 0x3800080}, | ||
| 6057 | {0x3800000, 0x9503366, 0x80002b94, 0x9503366, 0x3800080}, | ||
| 6058 | {0x3800000, 0x9503366, 0x80636d24, 0x9503366, 0x3800080}, | ||
| 6059 | {0x3800000, 0x9503366, 0x807fffff, 0x9503366, 0x3800080}, | ||
| 6060 | {0x3800000, 0x9503366, 0x80800000, 0x9503326, 0x3800000}, | ||
| 6061 | {0x3800000, 0x9503366, 0x80800002, 0x9503325, 0x3800010}, | ||
| 6062 | {0x3800000, 0x9503366, 0x81398437, 0x95032ac, 0x3800010}, | ||
| 6063 | {0x3800000, 0x9503366, 0x8ba98d27, 0x8ba30b8c, 0x3800010}, | ||
| 6064 | {0x3800000, 0x9503366, 0x8ba98d7a, 0x8ba30bdf, 0x3800010}, | ||
| 6065 | {0x3800000, 0x9503366, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 6066 | {0x3800000, 0x9503366, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 6067 | {0x3800000, 0x9503366, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 6068 | {0x3800000, 0x9503366, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6069 | {0x3800000, 0x9503366, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6070 | {0x3800000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6071 | {0x3800000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6072 | {0x3800000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6073 | {0x3800000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6074 | {0x3800000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6075 | {0x3800000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 6076 | {0x3800000, 0x9503366, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 6077 | {0x3800000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 6078 | {0x3800000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 6079 | {0x3800000, 0x9503366, 0x9503366, 0x9d03366, 0x3800000}, | ||
| 6080 | {0x3800000, 0x9503366, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, | ||
| 6081 | {0x3800000, 0x9503366, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 6082 | {0x3800000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 6083 | {0x3800000, 0x9503366, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, | ||
| 6084 | {0x3800000, 0x9503366, 0x966320b, 0x9db32b8, 0x3800010}, | ||
| 6085 | {0x3800000, 0x9503366, 0xb26bddee, 0xb26bddee, 0x3800010}, | ||
| 6086 | {0x3800000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, | ||
| 6087 | {0x3800000, 0x9503366, 0x317285d3, 0x317285d3, 0x3800010}, | ||
| 6088 | {0x3800000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3800010}, | ||
| 6089 | {0x3800000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 6090 | {0x3800000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 6091 | {0x3800000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3800000}, | ||
| 6092 | {0x3800000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3800080}, | ||
| 6093 | {0x3800000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3800080}, | ||
| 6094 | {0x3800000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3800080}, | ||
| 6095 | {0x3800000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3800080}, | ||
| 6096 | {0x3800000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3800080}, | ||
| 6097 | {0x3800000, 0xbf5a97c9, 0x800000, 0xbf5a97c9, 0x3800010}, | ||
| 6098 | {0x3800000, 0xbf5a97c9, 0x800002, 0xbf5a97c9, 0x3800010}, | ||
| 6099 | {0x3800000, 0xbf5a97c9, 0x1398437, 0xbf5a97c9, 0x3800010}, | ||
| 6100 | {0x3800000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c9, 0x3800010}, | ||
| 6101 | {0x3800000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c9, 0x3800010}, | ||
| 6102 | {0x3800000, 0xbf5a97c9, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 6103 | {0x3800000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 6104 | {0x3800000, 0xbf5a97c9, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 6105 | {0x3800000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6106 | {0x3800000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6107 | {0x3800000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6108 | {0x3800000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6109 | {0x3800000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6110 | {0x3800000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6111 | {0x3800000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6112 | {0x3800000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3800000}, | ||
| 6113 | {0x3800000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3800080}, | ||
| 6114 | {0x3800000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3800080}, | ||
| 6115 | {0x3800000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3800080}, | ||
| 6116 | {0x3800000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3800080}, | ||
| 6117 | {0x3800000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3800080}, | ||
| 6118 | {0x3800000, 0xbf5a97c9, 0x80800000, 0xbf5a97ca, 0x3800010}, | ||
| 6119 | {0x3800000, 0xbf5a97c9, 0x80800002, 0xbf5a97ca, 0x3800010}, | ||
| 6120 | {0x3800000, 0xbf5a97c9, 0x81398437, 0xbf5a97ca, 0x3800010}, | ||
| 6121 | {0x3800000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97ca, 0x3800010}, | ||
| 6122 | {0x3800000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97ca, 0x3800010}, | ||
| 6123 | {0x3800000, 0xbf5a97c9, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 6124 | {0x3800000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 6125 | {0x3800000, 0xbf5a97c9, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 6126 | {0x3800000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6127 | {0x3800000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6128 | {0x3800000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6129 | {0x3800000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6130 | {0x3800000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6131 | {0x3800000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6132 | {0x3800000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6133 | {0x3800000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 6134 | {0x3800000, 0xbf5a97c9, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 6135 | {0x3800000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 6136 | {0x3800000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 6137 | {0x3800000, 0xbf5a97c9, 0x9503366, 0xbf5a97c9, 0x3800010}, | ||
| 6138 | {0x3800000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3800000}, | ||
| 6139 | {0x3800000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 6140 | {0x3800000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 6141 | {0x3800000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97ca, 0x3800010}, | ||
| 6142 | {0x3800000, 0xbf5a97c9, 0x966320b, 0xbf5a97c9, 0x3800010}, | ||
| 6143 | {0x3800000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97ca, 0x3800010}, | ||
| 6144 | {0x3800000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e3, 0x3800010}, | ||
| 6145 | {0x3800000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c9, 0x3800010}, | ||
| 6146 | {0x3800000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ac, 0x3800010}, | ||
| 6147 | {0x3800000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 6148 | {0x3800000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 6149 | {0x3800000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3800000}, | ||
| 6150 | {0x3800000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3800080}, | ||
| 6151 | {0x3800000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3800080}, | ||
| 6152 | {0x3800000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3800080}, | ||
| 6153 | {0x3800000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3800080}, | ||
| 6154 | {0x3800000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3800080}, | ||
| 6155 | {0x3800000, 0xe6ff1a14, 0x800000, 0xe6ff1a14, 0x3800010}, | ||
| 6156 | {0x3800000, 0xe6ff1a14, 0x800002, 0xe6ff1a14, 0x3800010}, | ||
| 6157 | {0x3800000, 0xe6ff1a14, 0x1398437, 0xe6ff1a14, 0x3800010}, | ||
| 6158 | {0x3800000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a14, 0x3800010}, | ||
| 6159 | {0x3800000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a14, 0x3800010}, | ||
| 6160 | {0x3800000, 0xe6ff1a14, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 6161 | {0x3800000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 6162 | {0x3800000, 0xe6ff1a14, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 6163 | {0x3800000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6164 | {0x3800000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6165 | {0x3800000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6166 | {0x3800000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6167 | {0x3800000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6168 | {0x3800000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6169 | {0x3800000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6170 | {0x3800000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3800000}, | ||
| 6171 | {0x3800000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3800080}, | ||
| 6172 | {0x3800000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3800080}, | ||
| 6173 | {0x3800000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3800080}, | ||
| 6174 | {0x3800000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3800080}, | ||
| 6175 | {0x3800000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3800080}, | ||
| 6176 | {0x3800000, 0xe6ff1a14, 0x80800000, 0xe6ff1a15, 0x3800010}, | ||
| 6177 | {0x3800000, 0xe6ff1a14, 0x80800002, 0xe6ff1a15, 0x3800010}, | ||
| 6178 | {0x3800000, 0xe6ff1a14, 0x81398437, 0xe6ff1a15, 0x3800010}, | ||
| 6179 | {0x3800000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a15, 0x3800010}, | ||
| 6180 | {0x3800000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a15, 0x3800010}, | ||
| 6181 | {0x3800000, 0xe6ff1a14, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 6182 | {0x3800000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 6183 | {0x3800000, 0xe6ff1a14, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 6184 | {0x3800000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6185 | {0x3800000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6186 | {0x3800000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6187 | {0x3800000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6188 | {0x3800000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6189 | {0x3800000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6190 | {0x3800000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6191 | {0x3800000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a14, 0x3800010}, | ||
| 6192 | {0x3800000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3800000}, | ||
| 6193 | {0x3800000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 6194 | {0x3800000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7d, 0x3800010}, | ||
| 6195 | {0x3800000, 0xe6ff1a14, 0x9503366, 0xe6ff1a14, 0x3800010}, | ||
| 6196 | {0x3800000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a15, 0x3800010}, | ||
| 6197 | {0x3800000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3800000}, | ||
| 6198 | {0x3800000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 6199 | {0x3800000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a15, 0x3800010}, | ||
| 6200 | {0x3800000, 0xe6ff1a14, 0x966320b, 0xe6ff1a14, 0x3800010}, | ||
| 6201 | {0x3800000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a15, 0x3800010}, | ||
| 6202 | {0x3800000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a15, 0x3800010}, | ||
| 6203 | {0x3800000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a14, 0x3800010}, | ||
| 6204 | {0x3800000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a14, 0x3800010}, | ||
| 6205 | {0x3800000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a14, 0x3800010}, | ||
| 6206 | {0x3800000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 6207 | {0x3800000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3800000}, | ||
| 6208 | {0x3800000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3800080}, | ||
| 6209 | {0x3800000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3800080}, | ||
| 6210 | {0x3800000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3800080}, | ||
| 6211 | {0x3800000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3800080}, | ||
| 6212 | {0x3800000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3800080}, | ||
| 6213 | {0x3800000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3800010}, | ||
| 6214 | {0x3800000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3800010}, | ||
| 6215 | {0x3800000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3800010}, | ||
| 6216 | {0x3800000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3800010}, | ||
| 6217 | {0x3800000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3800010}, | ||
| 6218 | {0x3800000, 0x77f31e2f, 0x751f853a, 0x77f81a58, 0x3800010}, | ||
| 6219 | {0x3800000, 0x77f31e2f, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, | ||
| 6220 | {0x3800000, 0x77f31e2f, 0x7f7fffff, 0x7f7fffff, 0x3800014}, | ||
| 6221 | {0x3800000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6222 | {0x3800000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6223 | {0x3800000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6224 | {0x3800000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6225 | {0x3800000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6226 | {0x3800000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6227 | {0x3800000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6228 | {0x3800000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3800000}, | ||
| 6229 | {0x3800000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3800080}, | ||
| 6230 | {0x3800000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3800080}, | ||
| 6231 | {0x3800000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3800080}, | ||
| 6232 | {0x3800000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3800080}, | ||
| 6233 | {0x3800000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3800080}, | ||
| 6234 | {0x3800000, 0x77f31e2f, 0x80800000, 0x77f31e2e, 0x3800010}, | ||
| 6235 | {0x3800000, 0x77f31e2f, 0x80800002, 0x77f31e2e, 0x3800010}, | ||
| 6236 | {0x3800000, 0x77f31e2f, 0x81398437, 0x77f31e2e, 0x3800010}, | ||
| 6237 | {0x3800000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2e, 0x3800010}, | ||
| 6238 | {0x3800000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2e, 0x3800010}, | ||
| 6239 | {0x3800000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3800010}, | ||
| 6240 | {0x3800000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe0a, 0x3800010}, | ||
| 6241 | {0x3800000, 0x77f31e2f, 0xff7fffff, 0xff7ffe19, 0x3800010}, | ||
| 6242 | {0x3800000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6243 | {0x3800000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6244 | {0x3800000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6245 | {0x3800000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6246 | {0x3800000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6247 | {0x3800000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6248 | {0x3800000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6249 | {0x3800000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3800010}, | ||
| 6250 | {0x3800000, 0x77f31e2f, 0xe73a5134, 0x77f31e2e, 0x3800010}, | ||
| 6251 | {0x3800000, 0x77f31e2f, 0x7c994e9e, 0x7c998b65, 0x3800010}, | ||
| 6252 | {0x3800000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3800010}, | ||
| 6253 | {0x3800000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3800010}, | ||
| 6254 | {0x3800000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2e, 0x3800010}, | ||
| 6255 | {0x3800000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2e, 0x3800010}, | ||
| 6256 | {0x3800000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3800000}, | ||
| 6257 | {0x3800000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2e, 0x3800010}, | ||
| 6258 | {0x3800000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3800010}, | ||
| 6259 | {0x3800000, 0x77f31e2f, 0xb26bddee, 0x77f31e2e, 0x3800010}, | ||
| 6260 | {0x3800000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2e, 0x3800010}, | ||
| 6261 | {0x3800000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3800010}, | ||
| 6262 | {0x3800000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3800010}, | ||
| 6263 | {0x3800000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3800010}, | ||
| 6264 | {0x3800000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3800010}, | ||
| 6265 | {0x3800000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3800000}, | ||
| 6266 | {0x3800000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3800080}, | ||
| 6267 | {0x3800000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3800080}, | ||
| 6268 | {0x3800000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3800080}, | ||
| 6269 | {0x3800000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3800080}, | ||
| 6270 | {0x3800000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3800080}, | ||
| 6271 | {0x3800000, 0xaab4d7d8, 0x800000, 0xaab4d7d8, 0x3800010}, | ||
| 6272 | {0x3800000, 0xaab4d7d8, 0x800002, 0xaab4d7d8, 0x3800010}, | ||
| 6273 | {0x3800000, 0xaab4d7d8, 0x1398437, 0xaab4d7d8, 0x3800010}, | ||
| 6274 | {0x3800000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d8, 0x3800010}, | ||
| 6275 | {0x3800000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d8, 0x3800010}, | ||
| 6276 | {0x3800000, 0xaab4d7d8, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 6277 | {0x3800000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 6278 | {0x3800000, 0xaab4d7d8, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 6279 | {0x3800000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6280 | {0x3800000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6281 | {0x3800000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6282 | {0x3800000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6283 | {0x3800000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6284 | {0x3800000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6285 | {0x3800000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6286 | {0x3800000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3800000}, | ||
| 6287 | {0x3800000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3800080}, | ||
| 6288 | {0x3800000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3800080}, | ||
| 6289 | {0x3800000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3800080}, | ||
| 6290 | {0x3800000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3800080}, | ||
| 6291 | {0x3800000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3800080}, | ||
| 6292 | {0x3800000, 0xaab4d7d8, 0x80800000, 0xaab4d7d9, 0x3800010}, | ||
| 6293 | {0x3800000, 0xaab4d7d8, 0x80800002, 0xaab4d7d9, 0x3800010}, | ||
| 6294 | {0x3800000, 0xaab4d7d8, 0x81398437, 0xaab4d7d9, 0x3800010}, | ||
| 6295 | {0x3800000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d9, 0x3800010}, | ||
| 6296 | {0x3800000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d9, 0x3800010}, | ||
| 6297 | {0x3800000, 0xaab4d7d8, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 6298 | {0x3800000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 6299 | {0x3800000, 0xaab4d7d8, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 6300 | {0x3800000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6301 | {0x3800000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6302 | {0x3800000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6303 | {0x3800000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6304 | {0x3800000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6305 | {0x3800000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6306 | {0x3800000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6307 | {0x3800000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 6308 | {0x3800000, 0xaab4d7d8, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 6309 | {0x3800000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 6310 | {0x3800000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 6311 | {0x3800000, 0xaab4d7d8, 0x9503366, 0xaab4d7d8, 0x3800010}, | ||
| 6312 | {0x3800000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, | ||
| 6313 | {0x3800000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 6314 | {0x3800000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 6315 | {0x3800000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3800000}, | ||
| 6316 | {0x3800000, 0xaab4d7d8, 0x966320b, 0xaab4d7d8, 0x3800010}, | ||
| 6317 | {0x3800000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf58, 0x3800010}, | ||
| 6318 | {0x3800000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d6, 0x3800010}, | ||
| 6319 | {0x3800000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3800010}, | ||
| 6320 | {0x3800000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b0, 0x3800010}, | ||
| 6321 | {0x3800000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 6322 | {0x3800000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 6323 | {0x3800000, 0x966320b, 0x0, 0x966320b, 0x3800000}, | ||
| 6324 | {0x3800000, 0x966320b, 0x1, 0x966320b, 0x3800080}, | ||
| 6325 | {0x3800000, 0x966320b, 0x76, 0x966320b, 0x3800080}, | ||
| 6326 | {0x3800000, 0x966320b, 0x2b94, 0x966320b, 0x3800080}, | ||
| 6327 | {0x3800000, 0x966320b, 0x636d24, 0x966320b, 0x3800080}, | ||
| 6328 | {0x3800000, 0x966320b, 0x7fffff, 0x966320b, 0x3800080}, | ||
| 6329 | {0x3800000, 0x966320b, 0x800000, 0x966324b, 0x3800000}, | ||
| 6330 | {0x3800000, 0x966320b, 0x800002, 0x966324b, 0x3800010}, | ||
| 6331 | {0x3800000, 0x966320b, 0x1398437, 0x96632c4, 0x3800010}, | ||
| 6332 | {0x3800000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3800010}, | ||
| 6333 | {0x3800000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3800010}, | ||
| 6334 | {0x3800000, 0x966320b, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 6335 | {0x3800000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 6336 | {0x3800000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 6337 | {0x3800000, 0x966320b, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6338 | {0x3800000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6339 | {0x3800000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6340 | {0x3800000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6341 | {0x3800000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6342 | {0x3800000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6343 | {0x3800000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6344 | {0x3800000, 0x966320b, 0x80000000, 0x966320b, 0x3800000}, | ||
| 6345 | {0x3800000, 0x966320b, 0x80000001, 0x966320b, 0x3800080}, | ||
| 6346 | {0x3800000, 0x966320b, 0x80000076, 0x966320b, 0x3800080}, | ||
| 6347 | {0x3800000, 0x966320b, 0x80002b94, 0x966320b, 0x3800080}, | ||
| 6348 | {0x3800000, 0x966320b, 0x80636d24, 0x966320b, 0x3800080}, | ||
| 6349 | {0x3800000, 0x966320b, 0x807fffff, 0x966320b, 0x3800080}, | ||
| 6350 | {0x3800000, 0x966320b, 0x80800000, 0x96631cb, 0x3800000}, | ||
| 6351 | {0x3800000, 0x966320b, 0x80800002, 0x96631ca, 0x3800010}, | ||
| 6352 | {0x3800000, 0x966320b, 0x81398437, 0x9663151, 0x3800010}, | ||
| 6353 | {0x3800000, 0x966320b, 0x8ba98d27, 0x8ba25b97, 0x3800010}, | ||
| 6354 | {0x3800000, 0x966320b, 0x8ba98d7a, 0x8ba25bea, 0x3800010}, | ||
| 6355 | {0x3800000, 0x966320b, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 6356 | {0x3800000, 0x966320b, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 6357 | {0x3800000, 0x966320b, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 6358 | {0x3800000, 0x966320b, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6359 | {0x3800000, 0x966320b, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6360 | {0x3800000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6361 | {0x3800000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6362 | {0x3800000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6363 | {0x3800000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6364 | {0x3800000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6365 | {0x3800000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 6366 | {0x3800000, 0x966320b, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 6367 | {0x3800000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 6368 | {0x3800000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 6369 | {0x3800000, 0x966320b, 0x9503366, 0x9db32b8, 0x3800010}, | ||
| 6370 | {0x3800000, 0x966320b, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, | ||
| 6371 | {0x3800000, 0x966320b, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 6372 | {0x3800000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 6373 | {0x3800000, 0x966320b, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, | ||
| 6374 | {0x3800000, 0x966320b, 0x966320b, 0x9e6320b, 0x3800000}, | ||
| 6375 | {0x3800000, 0x966320b, 0xb26bddee, 0xb26bddee, 0x3800010}, | ||
| 6376 | {0x3800000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, | ||
| 6377 | {0x3800000, 0x966320b, 0x317285d3, 0x317285d3, 0x3800010}, | ||
| 6378 | {0x3800000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3800010}, | ||
| 6379 | {0x3800000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 6380 | {0x3800000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 6381 | {0x3800000, 0xb26bddee, 0x0, 0xb26bddee, 0x3800000}, | ||
| 6382 | {0x3800000, 0xb26bddee, 0x1, 0xb26bddee, 0x3800080}, | ||
| 6383 | {0x3800000, 0xb26bddee, 0x76, 0xb26bddee, 0x3800080}, | ||
| 6384 | {0x3800000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3800080}, | ||
| 6385 | {0x3800000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3800080}, | ||
| 6386 | {0x3800000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3800080}, | ||
| 6387 | {0x3800000, 0xb26bddee, 0x800000, 0xb26bddee, 0x3800010}, | ||
| 6388 | {0x3800000, 0xb26bddee, 0x800002, 0xb26bddee, 0x3800010}, | ||
| 6389 | {0x3800000, 0xb26bddee, 0x1398437, 0xb26bddee, 0x3800010}, | ||
| 6390 | {0x3800000, 0xb26bddee, 0xba98d27, 0xb26bddee, 0x3800010}, | ||
| 6391 | {0x3800000, 0xb26bddee, 0xba98d7a, 0xb26bddee, 0x3800010}, | ||
| 6392 | {0x3800000, 0xb26bddee, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 6393 | {0x3800000, 0xb26bddee, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 6394 | {0x3800000, 0xb26bddee, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 6395 | {0x3800000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6396 | {0x3800000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6397 | {0x3800000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6398 | {0x3800000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6399 | {0x3800000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6400 | {0x3800000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6401 | {0x3800000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6402 | {0x3800000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3800000}, | ||
| 6403 | {0x3800000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3800080}, | ||
| 6404 | {0x3800000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3800080}, | ||
| 6405 | {0x3800000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3800080}, | ||
| 6406 | {0x3800000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3800080}, | ||
| 6407 | {0x3800000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3800080}, | ||
| 6408 | {0x3800000, 0xb26bddee, 0x80800000, 0xb26bddef, 0x3800010}, | ||
| 6409 | {0x3800000, 0xb26bddee, 0x80800002, 0xb26bddef, 0x3800010}, | ||
| 6410 | {0x3800000, 0xb26bddee, 0x81398437, 0xb26bddef, 0x3800010}, | ||
| 6411 | {0x3800000, 0xb26bddee, 0x8ba98d27, 0xb26bddef, 0x3800010}, | ||
| 6412 | {0x3800000, 0xb26bddee, 0x8ba98d7a, 0xb26bddef, 0x3800010}, | ||
| 6413 | {0x3800000, 0xb26bddee, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 6414 | {0x3800000, 0xb26bddee, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 6415 | {0x3800000, 0xb26bddee, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 6416 | {0x3800000, 0xb26bddee, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6417 | {0x3800000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6418 | {0x3800000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6419 | {0x3800000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6420 | {0x3800000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6421 | {0x3800000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6422 | {0x3800000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6423 | {0x3800000, 0xb26bddee, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 6424 | {0x3800000, 0xb26bddee, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 6425 | {0x3800000, 0xb26bddee, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 6426 | {0x3800000, 0xb26bddee, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 6427 | {0x3800000, 0xb26bddee, 0x9503366, 0xb26bddee, 0x3800010}, | ||
| 6428 | {0x3800000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, | ||
| 6429 | {0x3800000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 6430 | {0x3800000, 0xb26bddee, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 6431 | {0x3800000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf58, 0x3800010}, | ||
| 6432 | {0x3800000, 0xb26bddee, 0x966320b, 0xb26bddee, 0x3800010}, | ||
| 6433 | {0x3800000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3800000}, | ||
| 6434 | {0x3800000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8f, 0x3800010}, | ||
| 6435 | {0x3800000, 0xb26bddee, 0x317285d3, 0xb22f3c7a, 0x3800010}, | ||
| 6436 | {0x3800000, 0xb26bddee, 0x3c9623b1, 0x3c9623a9, 0x3800010}, | ||
| 6437 | {0x3800000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 6438 | {0x3800000, 0xb26bddee, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 6439 | {0x3800000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3800000}, | ||
| 6440 | {0x3800000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3800080}, | ||
| 6441 | {0x3800000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3800080}, | ||
| 6442 | {0x3800000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3800080}, | ||
| 6443 | {0x3800000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3800080}, | ||
| 6444 | {0x3800000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3800080}, | ||
| 6445 | {0x3800000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d3, 0x3800010}, | ||
| 6446 | {0x3800000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d3, 0x3800010}, | ||
| 6447 | {0x3800000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d3, 0x3800010}, | ||
| 6448 | {0x3800000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d3, 0x3800010}, | ||
| 6449 | {0x3800000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d3, 0x3800010}, | ||
| 6450 | {0x3800000, 0xb5c8e5d3, 0x751f853a, 0x751f8539, 0x3800010}, | ||
| 6451 | {0x3800000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, | ||
| 6452 | {0x3800000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, | ||
| 6453 | {0x3800000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6454 | {0x3800000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6455 | {0x3800000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6456 | {0x3800000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6457 | {0x3800000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6458 | {0x3800000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6459 | {0x3800000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6460 | {0x3800000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3800000}, | ||
| 6461 | {0x3800000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3800080}, | ||
| 6462 | {0x3800000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3800080}, | ||
| 6463 | {0x3800000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3800080}, | ||
| 6464 | {0x3800000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3800080}, | ||
| 6465 | {0x3800000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3800080}, | ||
| 6466 | {0x3800000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d4, 0x3800010}, | ||
| 6467 | {0x3800000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d4, 0x3800010}, | ||
| 6468 | {0x3800000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d4, 0x3800010}, | ||
| 6469 | {0x3800000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d4, 0x3800010}, | ||
| 6470 | {0x3800000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d4, 0x3800010}, | ||
| 6471 | {0x3800000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853b, 0x3800010}, | ||
| 6472 | {0x3800000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff1, 0x3800010}, | ||
| 6473 | {0x3800000, 0xb5c8e5d3, 0xff7fffff, 0xff800000, 0x3800014}, | ||
| 6474 | {0x3800000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6475 | {0x3800000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6476 | {0x3800000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6477 | {0x3800000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6478 | {0x3800000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6479 | {0x3800000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6480 | {0x3800000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6481 | {0x3800000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495ca, 0x3800010}, | ||
| 6482 | {0x3800000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5135, 0x3800010}, | ||
| 6483 | {0x3800000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9d, 0x3800010}, | ||
| 6484 | {0x3800000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6b, 0x3800010}, | ||
| 6485 | {0x3800000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d3, 0x3800010}, | ||
| 6486 | {0x3800000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e3, 0x3800010}, | ||
| 6487 | {0x3800000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, | ||
| 6488 | {0x3800000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2e, 0x3800010}, | ||
| 6489 | {0x3800000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d6, 0x3800010}, | ||
| 6490 | {0x3800000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d3, 0x3800010}, | ||
| 6491 | {0x3800000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8f, 0x3800010}, | ||
| 6492 | {0x3800000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3800000}, | ||
| 6493 | {0x3800000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c91, 0x3800010}, | ||
| 6494 | {0x3800000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3800010}, | ||
| 6495 | {0x3800000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, | ||
| 6496 | {0x3800000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6b, 0x3800010}, | ||
| 6497 | {0x3800000, 0x317285d3, 0x0, 0x317285d3, 0x3800000}, | ||
| 6498 | {0x3800000, 0x317285d3, 0x1, 0x317285d3, 0x3800080}, | ||
| 6499 | {0x3800000, 0x317285d3, 0x76, 0x317285d3, 0x3800080}, | ||
| 6500 | {0x3800000, 0x317285d3, 0x2b94, 0x317285d3, 0x3800080}, | ||
| 6501 | {0x3800000, 0x317285d3, 0x636d24, 0x317285d3, 0x3800080}, | ||
| 6502 | {0x3800000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3800080}, | ||
| 6503 | {0x3800000, 0x317285d3, 0x800000, 0x317285d3, 0x3800010}, | ||
| 6504 | {0x3800000, 0x317285d3, 0x800002, 0x317285d3, 0x3800010}, | ||
| 6505 | {0x3800000, 0x317285d3, 0x1398437, 0x317285d3, 0x3800010}, | ||
| 6506 | {0x3800000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3800010}, | ||
| 6507 | {0x3800000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3800010}, | ||
| 6508 | {0x3800000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 6509 | {0x3800000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 6510 | {0x3800000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 6511 | {0x3800000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6512 | {0x3800000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6513 | {0x3800000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6514 | {0x3800000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6515 | {0x3800000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6516 | {0x3800000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6517 | {0x3800000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6518 | {0x3800000, 0x317285d3, 0x80000000, 0x317285d3, 0x3800000}, | ||
| 6519 | {0x3800000, 0x317285d3, 0x80000001, 0x317285d3, 0x3800080}, | ||
| 6520 | {0x3800000, 0x317285d3, 0x80000076, 0x317285d3, 0x3800080}, | ||
| 6521 | {0x3800000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3800080}, | ||
| 6522 | {0x3800000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3800080}, | ||
| 6523 | {0x3800000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3800080}, | ||
| 6524 | {0x3800000, 0x317285d3, 0x80800000, 0x317285d2, 0x3800010}, | ||
| 6525 | {0x3800000, 0x317285d3, 0x80800002, 0x317285d2, 0x3800010}, | ||
| 6526 | {0x3800000, 0x317285d3, 0x81398437, 0x317285d2, 0x3800010}, | ||
| 6527 | {0x3800000, 0x317285d3, 0x8ba98d27, 0x317285d2, 0x3800010}, | ||
| 6528 | {0x3800000, 0x317285d3, 0x8ba98d7a, 0x317285d2, 0x3800010}, | ||
| 6529 | {0x3800000, 0x317285d3, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 6530 | {0x3800000, 0x317285d3, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 6531 | {0x3800000, 0x317285d3, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 6532 | {0x3800000, 0x317285d3, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6533 | {0x3800000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6534 | {0x3800000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6535 | {0x3800000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6536 | {0x3800000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6537 | {0x3800000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6538 | {0x3800000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6539 | {0x3800000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 6540 | {0x3800000, 0x317285d3, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 6541 | {0x3800000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 6542 | {0x3800000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 6543 | {0x3800000, 0x317285d3, 0x9503366, 0x317285d3, 0x3800010}, | ||
| 6544 | {0x3800000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, | ||
| 6545 | {0x3800000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 6546 | {0x3800000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 6547 | {0x3800000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3800010}, | ||
| 6548 | {0x3800000, 0x317285d3, 0x966320b, 0x317285d3, 0x3800010}, | ||
| 6549 | {0x3800000, 0x317285d3, 0xb26bddee, 0xb22f3c7a, 0x3800010}, | ||
| 6550 | {0x3800000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c91, 0x3800010}, | ||
| 6551 | {0x3800000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3800000}, | ||
| 6552 | {0x3800000, 0x317285d3, 0x3c9623b1, 0x3c9623b2, 0x3800010}, | ||
| 6553 | {0x3800000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 6554 | {0x3800000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 6555 | {0x3800000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3800000}, | ||
| 6556 | {0x3800000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3800080}, | ||
| 6557 | {0x3800000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3800080}, | ||
| 6558 | {0x3800000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3800080}, | ||
| 6559 | {0x3800000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3800080}, | ||
| 6560 | {0x3800000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3800080}, | ||
| 6561 | {0x3800000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3800010}, | ||
| 6562 | {0x3800000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3800010}, | ||
| 6563 | {0x3800000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3800010}, | ||
| 6564 | {0x3800000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3800010}, | ||
| 6565 | {0x3800000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3800010}, | ||
| 6566 | {0x3800000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 6567 | {0x3800000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 6568 | {0x3800000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 6569 | {0x3800000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6570 | {0x3800000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6571 | {0x3800000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6572 | {0x3800000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6573 | {0x3800000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6574 | {0x3800000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6575 | {0x3800000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6576 | {0x3800000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3800000}, | ||
| 6577 | {0x3800000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3800080}, | ||
| 6578 | {0x3800000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3800080}, | ||
| 6579 | {0x3800000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3800080}, | ||
| 6580 | {0x3800000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3800080}, | ||
| 6581 | {0x3800000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3800080}, | ||
| 6582 | {0x3800000, 0x3c9623b1, 0x80800000, 0x3c9623b0, 0x3800010}, | ||
| 6583 | {0x3800000, 0x3c9623b1, 0x80800002, 0x3c9623b0, 0x3800010}, | ||
| 6584 | {0x3800000, 0x3c9623b1, 0x81398437, 0x3c9623b0, 0x3800010}, | ||
| 6585 | {0x3800000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b0, 0x3800010}, | ||
| 6586 | {0x3800000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b0, 0x3800010}, | ||
| 6587 | {0x3800000, 0x3c9623b1, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 6588 | {0x3800000, 0x3c9623b1, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 6589 | {0x3800000, 0x3c9623b1, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 6590 | {0x3800000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6591 | {0x3800000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6592 | {0x3800000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6593 | {0x3800000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6594 | {0x3800000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6595 | {0x3800000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6596 | {0x3800000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6597 | {0x3800000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3800010}, | ||
| 6598 | {0x3800000, 0x3c9623b1, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 6599 | {0x3800000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 6600 | {0x3800000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 6601 | {0x3800000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3800010}, | ||
| 6602 | {0x3800000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ac, 0x3800010}, | ||
| 6603 | {0x3800000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 6604 | {0x3800000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 6605 | {0x3800000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b0, 0x3800010}, | ||
| 6606 | {0x3800000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3800010}, | ||
| 6607 | {0x3800000, 0x3c9623b1, 0xb26bddee, 0x3c9623a9, 0x3800010}, | ||
| 6608 | {0x3800000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3800010}, | ||
| 6609 | {0x3800000, 0x3c9623b1, 0x317285d3, 0x3c9623b2, 0x3800010}, | ||
| 6610 | {0x3800000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3800000}, | ||
| 6611 | {0x3800000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, | ||
| 6612 | {0x3800000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 6613 | {0x3800000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3800000}, | ||
| 6614 | {0x3800000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3800080}, | ||
| 6615 | {0x3800000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3800080}, | ||
| 6616 | {0x3800000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3800080}, | ||
| 6617 | {0x3800000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3800080}, | ||
| 6618 | {0x3800000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3800080}, | ||
| 6619 | {0x3800000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3800010}, | ||
| 6620 | {0x3800000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3800010}, | ||
| 6621 | {0x3800000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3800010}, | ||
| 6622 | {0x3800000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3800010}, | ||
| 6623 | {0x3800000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3800010}, | ||
| 6624 | {0x3800000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3800010}, | ||
| 6625 | {0x3800000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, | ||
| 6626 | {0x3800000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3800010}, | ||
| 6627 | {0x3800000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6628 | {0x3800000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6629 | {0x3800000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6630 | {0x3800000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6631 | {0x3800000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6632 | {0x3800000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6633 | {0x3800000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6634 | {0x3800000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3800000}, | ||
| 6635 | {0x3800000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3800080}, | ||
| 6636 | {0x3800000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3800080}, | ||
| 6637 | {0x3800000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3800080}, | ||
| 6638 | {0x3800000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3800080}, | ||
| 6639 | {0x3800000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3800080}, | ||
| 6640 | {0x3800000, 0x51fd2c7c, 0x80800000, 0x51fd2c7b, 0x3800010}, | ||
| 6641 | {0x3800000, 0x51fd2c7c, 0x80800002, 0x51fd2c7b, 0x3800010}, | ||
| 6642 | {0x3800000, 0x51fd2c7c, 0x81398437, 0x51fd2c7b, 0x3800010}, | ||
| 6643 | {0x3800000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7b, 0x3800010}, | ||
| 6644 | {0x3800000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7b, 0x3800010}, | ||
| 6645 | {0x3800000, 0x51fd2c7c, 0xf51f853a, 0xf51f853a, 0x3800010}, | ||
| 6646 | {0x3800000, 0x51fd2c7c, 0xff7ffff0, 0xff7ffff0, 0x3800010}, | ||
| 6647 | {0x3800000, 0x51fd2c7c, 0xff7fffff, 0xff7fffff, 0x3800010}, | ||
| 6648 | {0x3800000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6649 | {0x3800000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6650 | {0x3800000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6651 | {0x3800000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6652 | {0x3800000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6653 | {0x3800000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6654 | {0x3800000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6655 | {0x3800000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3800010}, | ||
| 6656 | {0x3800000, 0x51fd2c7c, 0xe73a5134, 0xe73a5134, 0x3800010}, | ||
| 6657 | {0x3800000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3800010}, | ||
| 6658 | {0x3800000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3800010}, | ||
| 6659 | {0x3800000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3800010}, | ||
| 6660 | {0x3800000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7b, 0x3800010}, | ||
| 6661 | {0x3800000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, | ||
| 6662 | {0x3800000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3800010}, | ||
| 6663 | {0x3800000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7b, 0x3800010}, | ||
| 6664 | {0x3800000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3800010}, | ||
| 6665 | {0x3800000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7b, 0x3800010}, | ||
| 6666 | {0x3800000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7b, 0x3800010}, | ||
| 6667 | {0x3800000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3800010}, | ||
| 6668 | {0x3800000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3800010}, | ||
| 6669 | {0x3800000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3800000}, | ||
| 6670 | {0x3800000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3800010}, | ||
| 6671 | {0x3800000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3800000}, | ||
| 6672 | {0x3800000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3800080}, | ||
| 6673 | {0x3800000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3800080}, | ||
| 6674 | {0x3800000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3800080}, | ||
| 6675 | {0x3800000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3800080}, | ||
| 6676 | {0x3800000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3800080}, | ||
| 6677 | {0x3800000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3800010}, | ||
| 6678 | {0x3800000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3800010}, | ||
| 6679 | {0x3800000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3800010}, | ||
| 6680 | {0x3800000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3800010}, | ||
| 6681 | {0x3800000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3800010}, | ||
| 6682 | {0x3800000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3800010}, | ||
| 6683 | {0x3800000, 0x7b906a6c, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, | ||
| 6684 | {0x3800000, 0x7b906a6c, 0x7f7fffff, 0x7f7fffff, 0x3800014}, | ||
| 6685 | {0x3800000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3800000}, | ||
| 6686 | {0x3800000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3800001}, | ||
| 6687 | {0x3800000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3800001}, | ||
| 6688 | {0x3800000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3800001}, | ||
| 6689 | {0x3800000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3800000}, | ||
| 6690 | {0x3800000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6691 | {0x3800000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3800000}, | ||
| 6692 | {0x3800000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3800000}, | ||
| 6693 | {0x3800000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3800080}, | ||
| 6694 | {0x3800000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3800080}, | ||
| 6695 | {0x3800000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3800080}, | ||
| 6696 | {0x3800000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3800080}, | ||
| 6697 | {0x3800000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3800080}, | ||
| 6698 | {0x3800000, 0x7b906a6c, 0x80800000, 0x7b906a6b, 0x3800010}, | ||
| 6699 | {0x3800000, 0x7b906a6c, 0x80800002, 0x7b906a6b, 0x3800010}, | ||
| 6700 | {0x3800000, 0x7b906a6c, 0x81398437, 0x7b906a6b, 0x3800010}, | ||
| 6701 | {0x3800000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6b, 0x3800010}, | ||
| 6702 | {0x3800000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6b, 0x3800010}, | ||
| 6703 | {0x3800000, 0x7b906a6c, 0xf51f853a, 0x7b90656f, 0x3800010}, | ||
| 6704 | {0x3800000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1c, 0x3800010}, | ||
| 6705 | {0x3800000, 0x7b906a6c, 0xff7fffff, 0xff7edf2b, 0x3800010}, | ||
| 6706 | {0x3800000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3800000}, | ||
| 6707 | {0x3800000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3800001}, | ||
| 6708 | {0x3800000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3800001}, | ||
| 6709 | {0x3800000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3800001}, | ||
| 6710 | {0x3800000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3800000}, | ||
| 6711 | {0x3800000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3800000}, | ||
| 6712 | {0x3800000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3800000}, | ||
| 6713 | {0x3800000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3800010}, | ||
| 6714 | {0x3800000, 0x7b906a6c, 0xe73a5134, 0x7b906a6b, 0x3800010}, | ||
| 6715 | {0x3800000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3800000}, | ||
| 6716 | {0x3800000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3800010}, | ||
| 6717 | {0x3800000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3800010}, | ||
| 6718 | {0x3800000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6b, 0x3800010}, | ||
| 6719 | {0x3800000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6b, 0x3800010}, | ||
| 6720 | {0x3800000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3800010}, | ||
| 6721 | {0x3800000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6b, 0x3800010}, | ||
| 6722 | {0x3800000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3800010}, | ||
| 6723 | {0x3800000, 0x7b906a6c, 0xb26bddee, 0x7b906a6b, 0x3800010}, | ||
| 6724 | {0x3800000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6b, 0x3800010}, | ||
| 6725 | {0x3800000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3800010}, | ||
| 6726 | {0x3800000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3800010}, | ||
| 6727 | {0x3800000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3800010}, | ||
| 6728 | {0x3800000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3800000}, | ||
| 6729 | {0x3400000, 0x0, 0x0, 0x0, 0x3400000}, | ||
| 6730 | {0x3400000, 0x0, 0x1, 0x0, 0x3400080}, | ||
| 6731 | {0x3400000, 0x0, 0x76, 0x0, 0x3400080}, | ||
| 6732 | {0x3400000, 0x0, 0x2b94, 0x0, 0x3400080}, | ||
| 6733 | {0x3400000, 0x0, 0x636d24, 0x0, 0x3400080}, | ||
| 6734 | {0x3400000, 0x0, 0x7fffff, 0x0, 0x3400080}, | ||
| 6735 | {0x3400000, 0x0, 0x800000, 0x800000, 0x3400000}, | ||
| 6736 | {0x3400000, 0x0, 0x800002, 0x800002, 0x3400000}, | ||
| 6737 | {0x3400000, 0x0, 0x1398437, 0x1398437, 0x3400000}, | ||
| 6738 | {0x3400000, 0x0, 0xba98d27, 0xba98d27, 0x3400000}, | ||
| 6739 | {0x3400000, 0x0, 0xba98d7a, 0xba98d7a, 0x3400000}, | ||
| 6740 | {0x3400000, 0x0, 0x751f853a, 0x751f853a, 0x3400000}, | ||
| 6741 | {0x3400000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3400000}, | ||
| 6742 | {0x3400000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3400000}, | ||
| 6743 | {0x3400000, 0x0, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 6744 | {0x3400000, 0x0, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 6745 | {0x3400000, 0x0, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 6746 | {0x3400000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 6747 | {0x3400000, 0x0, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 6748 | {0x3400000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 6749 | {0x3400000, 0x0, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 6750 | {0x3400000, 0x0, 0x80000000, 0x0, 0x3400000}, | ||
| 6751 | {0x3400000, 0x0, 0x80000001, 0x0, 0x3400080}, | ||
| 6752 | {0x3400000, 0x0, 0x80000076, 0x0, 0x3400080}, | ||
| 6753 | {0x3400000, 0x0, 0x80002b94, 0x0, 0x3400080}, | ||
| 6754 | {0x3400000, 0x0, 0x80636d24, 0x0, 0x3400080}, | ||
| 6755 | {0x3400000, 0x0, 0x807fffff, 0x0, 0x3400080}, | ||
| 6756 | {0x3400000, 0x0, 0x80800000, 0x80800000, 0x3400000}, | ||
| 6757 | {0x3400000, 0x0, 0x80800002, 0x80800002, 0x3400000}, | ||
| 6758 | {0x3400000, 0x0, 0x81398437, 0x81398437, 0x3400000}, | ||
| 6759 | {0x3400000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3400000}, | ||
| 6760 | {0x3400000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3400000}, | ||
| 6761 | {0x3400000, 0x0, 0xf51f853a, 0xf51f853a, 0x3400000}, | ||
| 6762 | {0x3400000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3400000}, | ||
| 6763 | {0x3400000, 0x0, 0xff7fffff, 0xff7fffff, 0x3400000}, | ||
| 6764 | {0x3400000, 0x0, 0xff800000, 0xff800000, 0x3400000}, | ||
| 6765 | {0x3400000, 0x0, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 6766 | {0x3400000, 0x0, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 6767 | {0x3400000, 0x0, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 6768 | {0x3400000, 0x0, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 6769 | {0x3400000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 6770 | {0x3400000, 0x0, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 6771 | {0x3400000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3400000}, | ||
| 6772 | {0x3400000, 0x0, 0xe73a5134, 0xe73a5134, 0x3400000}, | ||
| 6773 | {0x3400000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3400000}, | ||
| 6774 | {0x3400000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3400000}, | ||
| 6775 | {0x3400000, 0x0, 0x9503366, 0x9503366, 0x3400000}, | ||
| 6776 | {0x3400000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3400000}, | ||
| 6777 | {0x3400000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3400000}, | ||
| 6778 | {0x3400000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3400000}, | ||
| 6779 | {0x3400000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3400000}, | ||
| 6780 | {0x3400000, 0x0, 0x966320b, 0x966320b, 0x3400000}, | ||
| 6781 | {0x3400000, 0x0, 0xb26bddee, 0xb26bddee, 0x3400000}, | ||
| 6782 | {0x3400000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400000}, | ||
| 6783 | {0x3400000, 0x0, 0x317285d3, 0x317285d3, 0x3400000}, | ||
| 6784 | {0x3400000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3400000}, | ||
| 6785 | {0x3400000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3400000}, | ||
| 6786 | {0x3400000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3400000}, | ||
| 6787 | {0x3400000, 0x1, 0x0, 0x0, 0x3400080}, | ||
| 6788 | {0x3400000, 0x1, 0x1, 0x0, 0x3400080}, | ||
| 6789 | {0x3400000, 0x1, 0x76, 0x0, 0x3400080}, | ||
| 6790 | {0x3400000, 0x1, 0x2b94, 0x0, 0x3400080}, | ||
| 6791 | {0x3400000, 0x1, 0x636d24, 0x0, 0x3400080}, | ||
| 6792 | {0x3400000, 0x1, 0x7fffff, 0x0, 0x3400080}, | ||
| 6793 | {0x3400000, 0x1, 0x800000, 0x800000, 0x3400080}, | ||
| 6794 | {0x3400000, 0x1, 0x800002, 0x800002, 0x3400080}, | ||
| 6795 | {0x3400000, 0x1, 0x1398437, 0x1398437, 0x3400080}, | ||
| 6796 | {0x3400000, 0x1, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 6797 | {0x3400000, 0x1, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 6798 | {0x3400000, 0x1, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 6799 | {0x3400000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 6800 | {0x3400000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 6801 | {0x3400000, 0x1, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 6802 | {0x3400000, 0x1, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 6803 | {0x3400000, 0x1, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 6804 | {0x3400000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 6805 | {0x3400000, 0x1, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 6806 | {0x3400000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 6807 | {0x3400000, 0x1, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 6808 | {0x3400000, 0x1, 0x80000000, 0x0, 0x3400080}, | ||
| 6809 | {0x3400000, 0x1, 0x80000001, 0x0, 0x3400080}, | ||
| 6810 | {0x3400000, 0x1, 0x80000076, 0x0, 0x3400080}, | ||
| 6811 | {0x3400000, 0x1, 0x80002b94, 0x0, 0x3400080}, | ||
| 6812 | {0x3400000, 0x1, 0x80636d24, 0x0, 0x3400080}, | ||
| 6813 | {0x3400000, 0x1, 0x807fffff, 0x0, 0x3400080}, | ||
| 6814 | {0x3400000, 0x1, 0x80800000, 0x80800000, 0x3400080}, | ||
| 6815 | {0x3400000, 0x1, 0x80800002, 0x80800002, 0x3400080}, | ||
| 6816 | {0x3400000, 0x1, 0x81398437, 0x81398437, 0x3400080}, | ||
| 6817 | {0x3400000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 6818 | {0x3400000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 6819 | {0x3400000, 0x1, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 6820 | {0x3400000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 6821 | {0x3400000, 0x1, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 6822 | {0x3400000, 0x1, 0xff800000, 0xff800000, 0x3400080}, | ||
| 6823 | {0x3400000, 0x1, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 6824 | {0x3400000, 0x1, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 6825 | {0x3400000, 0x1, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 6826 | {0x3400000, 0x1, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 6827 | {0x3400000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 6828 | {0x3400000, 0x1, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 6829 | {0x3400000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 6830 | {0x3400000, 0x1, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 6831 | {0x3400000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 6832 | {0x3400000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 6833 | {0x3400000, 0x1, 0x9503366, 0x9503366, 0x3400080}, | ||
| 6834 | {0x3400000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 6835 | {0x3400000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 6836 | {0x3400000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 6837 | {0x3400000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 6838 | {0x3400000, 0x1, 0x966320b, 0x966320b, 0x3400080}, | ||
| 6839 | {0x3400000, 0x1, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 6840 | {0x3400000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 6841 | {0x3400000, 0x1, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 6842 | {0x3400000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 6843 | {0x3400000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 6844 | {0x3400000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 6845 | {0x3400000, 0x76, 0x0, 0x0, 0x3400080}, | ||
| 6846 | {0x3400000, 0x76, 0x1, 0x0, 0x3400080}, | ||
| 6847 | {0x3400000, 0x76, 0x76, 0x0, 0x3400080}, | ||
| 6848 | {0x3400000, 0x76, 0x2b94, 0x0, 0x3400080}, | ||
| 6849 | {0x3400000, 0x76, 0x636d24, 0x0, 0x3400080}, | ||
| 6850 | {0x3400000, 0x76, 0x7fffff, 0x0, 0x3400080}, | ||
| 6851 | {0x3400000, 0x76, 0x800000, 0x800000, 0x3400080}, | ||
| 6852 | {0x3400000, 0x76, 0x800002, 0x800002, 0x3400080}, | ||
| 6853 | {0x3400000, 0x76, 0x1398437, 0x1398437, 0x3400080}, | ||
| 6854 | {0x3400000, 0x76, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 6855 | {0x3400000, 0x76, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 6856 | {0x3400000, 0x76, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 6857 | {0x3400000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 6858 | {0x3400000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 6859 | {0x3400000, 0x76, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 6860 | {0x3400000, 0x76, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 6861 | {0x3400000, 0x76, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 6862 | {0x3400000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 6863 | {0x3400000, 0x76, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 6864 | {0x3400000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 6865 | {0x3400000, 0x76, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 6866 | {0x3400000, 0x76, 0x80000000, 0x0, 0x3400080}, | ||
| 6867 | {0x3400000, 0x76, 0x80000001, 0x0, 0x3400080}, | ||
| 6868 | {0x3400000, 0x76, 0x80000076, 0x0, 0x3400080}, | ||
| 6869 | {0x3400000, 0x76, 0x80002b94, 0x0, 0x3400080}, | ||
| 6870 | {0x3400000, 0x76, 0x80636d24, 0x0, 0x3400080}, | ||
| 6871 | {0x3400000, 0x76, 0x807fffff, 0x0, 0x3400080}, | ||
| 6872 | {0x3400000, 0x76, 0x80800000, 0x80800000, 0x3400080}, | ||
| 6873 | {0x3400000, 0x76, 0x80800002, 0x80800002, 0x3400080}, | ||
| 6874 | {0x3400000, 0x76, 0x81398437, 0x81398437, 0x3400080}, | ||
| 6875 | {0x3400000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 6876 | {0x3400000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 6877 | {0x3400000, 0x76, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 6878 | {0x3400000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 6879 | {0x3400000, 0x76, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 6880 | {0x3400000, 0x76, 0xff800000, 0xff800000, 0x3400080}, | ||
| 6881 | {0x3400000, 0x76, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 6882 | {0x3400000, 0x76, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 6883 | {0x3400000, 0x76, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 6884 | {0x3400000, 0x76, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 6885 | {0x3400000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 6886 | {0x3400000, 0x76, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 6887 | {0x3400000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 6888 | {0x3400000, 0x76, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 6889 | {0x3400000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 6890 | {0x3400000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 6891 | {0x3400000, 0x76, 0x9503366, 0x9503366, 0x3400080}, | ||
| 6892 | {0x3400000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 6893 | {0x3400000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 6894 | {0x3400000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 6895 | {0x3400000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 6896 | {0x3400000, 0x76, 0x966320b, 0x966320b, 0x3400080}, | ||
| 6897 | {0x3400000, 0x76, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 6898 | {0x3400000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 6899 | {0x3400000, 0x76, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 6900 | {0x3400000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 6901 | {0x3400000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 6902 | {0x3400000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 6903 | {0x3400000, 0x2b94, 0x0, 0x0, 0x3400080}, | ||
| 6904 | {0x3400000, 0x2b94, 0x1, 0x0, 0x3400080}, | ||
| 6905 | {0x3400000, 0x2b94, 0x76, 0x0, 0x3400080}, | ||
| 6906 | {0x3400000, 0x2b94, 0x2b94, 0x0, 0x3400080}, | ||
| 6907 | {0x3400000, 0x2b94, 0x636d24, 0x0, 0x3400080}, | ||
| 6908 | {0x3400000, 0x2b94, 0x7fffff, 0x0, 0x3400080}, | ||
| 6909 | {0x3400000, 0x2b94, 0x800000, 0x800000, 0x3400080}, | ||
| 6910 | {0x3400000, 0x2b94, 0x800002, 0x800002, 0x3400080}, | ||
| 6911 | {0x3400000, 0x2b94, 0x1398437, 0x1398437, 0x3400080}, | ||
| 6912 | {0x3400000, 0x2b94, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 6913 | {0x3400000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 6914 | {0x3400000, 0x2b94, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 6915 | {0x3400000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 6916 | {0x3400000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 6917 | {0x3400000, 0x2b94, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 6918 | {0x3400000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 6919 | {0x3400000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 6920 | {0x3400000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 6921 | {0x3400000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 6922 | {0x3400000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 6923 | {0x3400000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 6924 | {0x3400000, 0x2b94, 0x80000000, 0x0, 0x3400080}, | ||
| 6925 | {0x3400000, 0x2b94, 0x80000001, 0x0, 0x3400080}, | ||
| 6926 | {0x3400000, 0x2b94, 0x80000076, 0x0, 0x3400080}, | ||
| 6927 | {0x3400000, 0x2b94, 0x80002b94, 0x0, 0x3400080}, | ||
| 6928 | {0x3400000, 0x2b94, 0x80636d24, 0x0, 0x3400080}, | ||
| 6929 | {0x3400000, 0x2b94, 0x807fffff, 0x0, 0x3400080}, | ||
| 6930 | {0x3400000, 0x2b94, 0x80800000, 0x80800000, 0x3400080}, | ||
| 6931 | {0x3400000, 0x2b94, 0x80800002, 0x80800002, 0x3400080}, | ||
| 6932 | {0x3400000, 0x2b94, 0x81398437, 0x81398437, 0x3400080}, | ||
| 6933 | {0x3400000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 6934 | {0x3400000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 6935 | {0x3400000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 6936 | {0x3400000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 6937 | {0x3400000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 6938 | {0x3400000, 0x2b94, 0xff800000, 0xff800000, 0x3400080}, | ||
| 6939 | {0x3400000, 0x2b94, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 6940 | {0x3400000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 6941 | {0x3400000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 6942 | {0x3400000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 6943 | {0x3400000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 6944 | {0x3400000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 6945 | {0x3400000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 6946 | {0x3400000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 6947 | {0x3400000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 6948 | {0x3400000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 6949 | {0x3400000, 0x2b94, 0x9503366, 0x9503366, 0x3400080}, | ||
| 6950 | {0x3400000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 6951 | {0x3400000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 6952 | {0x3400000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 6953 | {0x3400000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 6954 | {0x3400000, 0x2b94, 0x966320b, 0x966320b, 0x3400080}, | ||
| 6955 | {0x3400000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 6956 | {0x3400000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 6957 | {0x3400000, 0x2b94, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 6958 | {0x3400000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 6959 | {0x3400000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 6960 | {0x3400000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 6961 | {0x3400000, 0x636d24, 0x0, 0x0, 0x3400080}, | ||
| 6962 | {0x3400000, 0x636d24, 0x1, 0x0, 0x3400080}, | ||
| 6963 | {0x3400000, 0x636d24, 0x76, 0x0, 0x3400080}, | ||
| 6964 | {0x3400000, 0x636d24, 0x2b94, 0x0, 0x3400080}, | ||
| 6965 | {0x3400000, 0x636d24, 0x636d24, 0x0, 0x3400080}, | ||
| 6966 | {0x3400000, 0x636d24, 0x7fffff, 0x0, 0x3400080}, | ||
| 6967 | {0x3400000, 0x636d24, 0x800000, 0x800000, 0x3400080}, | ||
| 6968 | {0x3400000, 0x636d24, 0x800002, 0x800002, 0x3400080}, | ||
| 6969 | {0x3400000, 0x636d24, 0x1398437, 0x1398437, 0x3400080}, | ||
| 6970 | {0x3400000, 0x636d24, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 6971 | {0x3400000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 6972 | {0x3400000, 0x636d24, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 6973 | {0x3400000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 6974 | {0x3400000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 6975 | {0x3400000, 0x636d24, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 6976 | {0x3400000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 6977 | {0x3400000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 6978 | {0x3400000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 6979 | {0x3400000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 6980 | {0x3400000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 6981 | {0x3400000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 6982 | {0x3400000, 0x636d24, 0x80000000, 0x0, 0x3400080}, | ||
| 6983 | {0x3400000, 0x636d24, 0x80000001, 0x0, 0x3400080}, | ||
| 6984 | {0x3400000, 0x636d24, 0x80000076, 0x0, 0x3400080}, | ||
| 6985 | {0x3400000, 0x636d24, 0x80002b94, 0x0, 0x3400080}, | ||
| 6986 | {0x3400000, 0x636d24, 0x80636d24, 0x0, 0x3400080}, | ||
| 6987 | {0x3400000, 0x636d24, 0x807fffff, 0x0, 0x3400080}, | ||
| 6988 | {0x3400000, 0x636d24, 0x80800000, 0x80800000, 0x3400080}, | ||
| 6989 | {0x3400000, 0x636d24, 0x80800002, 0x80800002, 0x3400080}, | ||
| 6990 | {0x3400000, 0x636d24, 0x81398437, 0x81398437, 0x3400080}, | ||
| 6991 | {0x3400000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 6992 | {0x3400000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 6993 | {0x3400000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 6994 | {0x3400000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 6995 | {0x3400000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 6996 | {0x3400000, 0x636d24, 0xff800000, 0xff800000, 0x3400080}, | ||
| 6997 | {0x3400000, 0x636d24, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 6998 | {0x3400000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 6999 | {0x3400000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 7000 | {0x3400000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 7001 | {0x3400000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 7002 | {0x3400000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 7003 | {0x3400000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 7004 | {0x3400000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 7005 | {0x3400000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 7006 | {0x3400000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 7007 | {0x3400000, 0x636d24, 0x9503366, 0x9503366, 0x3400080}, | ||
| 7008 | {0x3400000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 7009 | {0x3400000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 7010 | {0x3400000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 7011 | {0x3400000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 7012 | {0x3400000, 0x636d24, 0x966320b, 0x966320b, 0x3400080}, | ||
| 7013 | {0x3400000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 7014 | {0x3400000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 7015 | {0x3400000, 0x636d24, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 7016 | {0x3400000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 7017 | {0x3400000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 7018 | {0x3400000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 7019 | {0x3400000, 0x7fffff, 0x0, 0x0, 0x3400080}, | ||
| 7020 | {0x3400000, 0x7fffff, 0x1, 0x0, 0x3400080}, | ||
| 7021 | {0x3400000, 0x7fffff, 0x76, 0x0, 0x3400080}, | ||
| 7022 | {0x3400000, 0x7fffff, 0x2b94, 0x0, 0x3400080}, | ||
| 7023 | {0x3400000, 0x7fffff, 0x636d24, 0x0, 0x3400080}, | ||
| 7024 | {0x3400000, 0x7fffff, 0x7fffff, 0x0, 0x3400080}, | ||
| 7025 | {0x3400000, 0x7fffff, 0x800000, 0x800000, 0x3400080}, | ||
| 7026 | {0x3400000, 0x7fffff, 0x800002, 0x800002, 0x3400080}, | ||
| 7027 | {0x3400000, 0x7fffff, 0x1398437, 0x1398437, 0x3400080}, | ||
| 7028 | {0x3400000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 7029 | {0x3400000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 7030 | {0x3400000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 7031 | {0x3400000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 7032 | {0x3400000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 7033 | {0x3400000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 7034 | {0x3400000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 7035 | {0x3400000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 7036 | {0x3400000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 7037 | {0x3400000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 7038 | {0x3400000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 7039 | {0x3400000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 7040 | {0x3400000, 0x7fffff, 0x80000000, 0x0, 0x3400080}, | ||
| 7041 | {0x3400000, 0x7fffff, 0x80000001, 0x0, 0x3400080}, | ||
| 7042 | {0x3400000, 0x7fffff, 0x80000076, 0x0, 0x3400080}, | ||
| 7043 | {0x3400000, 0x7fffff, 0x80002b94, 0x0, 0x3400080}, | ||
| 7044 | {0x3400000, 0x7fffff, 0x80636d24, 0x0, 0x3400080}, | ||
| 7045 | {0x3400000, 0x7fffff, 0x807fffff, 0x0, 0x3400080}, | ||
| 7046 | {0x3400000, 0x7fffff, 0x80800000, 0x80800000, 0x3400080}, | ||
| 7047 | {0x3400000, 0x7fffff, 0x80800002, 0x80800002, 0x3400080}, | ||
| 7048 | {0x3400000, 0x7fffff, 0x81398437, 0x81398437, 0x3400080}, | ||
| 7049 | {0x3400000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 7050 | {0x3400000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 7051 | {0x3400000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 7052 | {0x3400000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 7053 | {0x3400000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 7054 | {0x3400000, 0x7fffff, 0xff800000, 0xff800000, 0x3400080}, | ||
| 7055 | {0x3400000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 7056 | {0x3400000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 7057 | {0x3400000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 7058 | {0x3400000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 7059 | {0x3400000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 7060 | {0x3400000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 7061 | {0x3400000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 7062 | {0x3400000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 7063 | {0x3400000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 7064 | {0x3400000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 7065 | {0x3400000, 0x7fffff, 0x9503366, 0x9503366, 0x3400080}, | ||
| 7066 | {0x3400000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 7067 | {0x3400000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 7068 | {0x3400000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 7069 | {0x3400000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 7070 | {0x3400000, 0x7fffff, 0x966320b, 0x966320b, 0x3400080}, | ||
| 7071 | {0x3400000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 7072 | {0x3400000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 7073 | {0x3400000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 7074 | {0x3400000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 7075 | {0x3400000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 7076 | {0x3400000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 7077 | {0x3400000, 0x800000, 0x0, 0x800000, 0x3400000}, | ||
| 7078 | {0x3400000, 0x800000, 0x1, 0x800000, 0x3400080}, | ||
| 7079 | {0x3400000, 0x800000, 0x76, 0x800000, 0x3400080}, | ||
| 7080 | {0x3400000, 0x800000, 0x2b94, 0x800000, 0x3400080}, | ||
| 7081 | {0x3400000, 0x800000, 0x636d24, 0x800000, 0x3400080}, | ||
| 7082 | {0x3400000, 0x800000, 0x7fffff, 0x800000, 0x3400080}, | ||
| 7083 | {0x3400000, 0x800000, 0x800000, 0x1000000, 0x3400000}, | ||
| 7084 | {0x3400000, 0x800000, 0x800002, 0x1000001, 0x3400000}, | ||
| 7085 | {0x3400000, 0x800000, 0x1398437, 0x1798437, 0x3400000}, | ||
| 7086 | {0x3400000, 0x800000, 0xba98d27, 0xba98d29, 0x3400000}, | ||
| 7087 | {0x3400000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3400000}, | ||
| 7088 | {0x3400000, 0x800000, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 7089 | {0x3400000, 0x800000, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 7090 | {0x3400000, 0x800000, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 7091 | {0x3400000, 0x800000, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7092 | {0x3400000, 0x800000, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7093 | {0x3400000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7094 | {0x3400000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7095 | {0x3400000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7096 | {0x3400000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7097 | {0x3400000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7098 | {0x3400000, 0x800000, 0x80000000, 0x800000, 0x3400000}, | ||
| 7099 | {0x3400000, 0x800000, 0x80000001, 0x800000, 0x3400080}, | ||
| 7100 | {0x3400000, 0x800000, 0x80000076, 0x800000, 0x3400080}, | ||
| 7101 | {0x3400000, 0x800000, 0x80002b94, 0x800000, 0x3400080}, | ||
| 7102 | {0x3400000, 0x800000, 0x80636d24, 0x800000, 0x3400080}, | ||
| 7103 | {0x3400000, 0x800000, 0x807fffff, 0x800000, 0x3400080}, | ||
| 7104 | {0x3400000, 0x800000, 0x80800000, 0x0, 0x3400000}, | ||
| 7105 | {0x3400000, 0x800000, 0x80800002, 0x0, 0x3400008}, | ||
| 7106 | {0x3400000, 0x800000, 0x81398437, 0x80f3086e, 0x3400000}, | ||
| 7107 | {0x3400000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3400000}, | ||
| 7108 | {0x3400000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3400000}, | ||
| 7109 | {0x3400000, 0x800000, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 7110 | {0x3400000, 0x800000, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 7111 | {0x3400000, 0x800000, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 7112 | {0x3400000, 0x800000, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7113 | {0x3400000, 0x800000, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7114 | {0x3400000, 0x800000, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7115 | {0x3400000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7116 | {0x3400000, 0x800000, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7117 | {0x3400000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7118 | {0x3400000, 0x800000, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7119 | {0x3400000, 0x800000, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 7120 | {0x3400000, 0x800000, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 7121 | {0x3400000, 0x800000, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 7122 | {0x3400000, 0x800000, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 7123 | {0x3400000, 0x800000, 0x9503366, 0x95033a6, 0x3400000}, | ||
| 7124 | {0x3400000, 0x800000, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, | ||
| 7125 | {0x3400000, 0x800000, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 7126 | {0x3400000, 0x800000, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 7127 | {0x3400000, 0x800000, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, | ||
| 7128 | {0x3400000, 0x800000, 0x966320b, 0x966324b, 0x3400000}, | ||
| 7129 | {0x3400000, 0x800000, 0xb26bddee, 0xb26bdded, 0x3400010}, | ||
| 7130 | {0x3400000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, | ||
| 7131 | {0x3400000, 0x800000, 0x317285d3, 0x317285d4, 0x3400010}, | ||
| 7132 | {0x3400000, 0x800000, 0x3c9623b1, 0x3c9623b2, 0x3400010}, | ||
| 7133 | {0x3400000, 0x800000, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 7134 | {0x3400000, 0x800000, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 7135 | {0x3400000, 0x800002, 0x0, 0x800002, 0x3400000}, | ||
| 7136 | {0x3400000, 0x800002, 0x1, 0x800002, 0x3400080}, | ||
| 7137 | {0x3400000, 0x800002, 0x76, 0x800002, 0x3400080}, | ||
| 7138 | {0x3400000, 0x800002, 0x2b94, 0x800002, 0x3400080}, | ||
| 7139 | {0x3400000, 0x800002, 0x636d24, 0x800002, 0x3400080}, | ||
| 7140 | {0x3400000, 0x800002, 0x7fffff, 0x800002, 0x3400080}, | ||
| 7141 | {0x3400000, 0x800002, 0x800000, 0x1000001, 0x3400000}, | ||
| 7142 | {0x3400000, 0x800002, 0x800002, 0x1000002, 0x3400000}, | ||
| 7143 | {0x3400000, 0x800002, 0x1398437, 0x1798438, 0x3400000}, | ||
| 7144 | {0x3400000, 0x800002, 0xba98d27, 0xba98d2a, 0x3400010}, | ||
| 7145 | {0x3400000, 0x800002, 0xba98d7a, 0xba98d7d, 0x3400010}, | ||
| 7146 | {0x3400000, 0x800002, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 7147 | {0x3400000, 0x800002, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 7148 | {0x3400000, 0x800002, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 7149 | {0x3400000, 0x800002, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7150 | {0x3400000, 0x800002, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7151 | {0x3400000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7152 | {0x3400000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7153 | {0x3400000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7154 | {0x3400000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7155 | {0x3400000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7156 | {0x3400000, 0x800002, 0x80000000, 0x800002, 0x3400000}, | ||
| 7157 | {0x3400000, 0x800002, 0x80000001, 0x800002, 0x3400080}, | ||
| 7158 | {0x3400000, 0x800002, 0x80000076, 0x800002, 0x3400080}, | ||
| 7159 | {0x3400000, 0x800002, 0x80002b94, 0x800002, 0x3400080}, | ||
| 7160 | {0x3400000, 0x800002, 0x80636d24, 0x800002, 0x3400080}, | ||
| 7161 | {0x3400000, 0x800002, 0x807fffff, 0x800002, 0x3400080}, | ||
| 7162 | {0x3400000, 0x800002, 0x80800000, 0x0, 0x3400008}, | ||
| 7163 | {0x3400000, 0x800002, 0x80800002, 0x0, 0x3400000}, | ||
| 7164 | {0x3400000, 0x800002, 0x81398437, 0x80f3086c, 0x3400000}, | ||
| 7165 | {0x3400000, 0x800002, 0x8ba98d27, 0x8ba98d24, 0x3400010}, | ||
| 7166 | {0x3400000, 0x800002, 0x8ba98d7a, 0x8ba98d77, 0x3400010}, | ||
| 7167 | {0x3400000, 0x800002, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 7168 | {0x3400000, 0x800002, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 7169 | {0x3400000, 0x800002, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 7170 | {0x3400000, 0x800002, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7171 | {0x3400000, 0x800002, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7172 | {0x3400000, 0x800002, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7173 | {0x3400000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7174 | {0x3400000, 0x800002, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7175 | {0x3400000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7176 | {0x3400000, 0x800002, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7177 | {0x3400000, 0x800002, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 7178 | {0x3400000, 0x800002, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 7179 | {0x3400000, 0x800002, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 7180 | {0x3400000, 0x800002, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 7181 | {0x3400000, 0x800002, 0x9503366, 0x95033a7, 0x3400010}, | ||
| 7182 | {0x3400000, 0x800002, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, | ||
| 7183 | {0x3400000, 0x800002, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 7184 | {0x3400000, 0x800002, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 7185 | {0x3400000, 0x800002, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, | ||
| 7186 | {0x3400000, 0x800002, 0x966320b, 0x966324c, 0x3400010}, | ||
| 7187 | {0x3400000, 0x800002, 0xb26bddee, 0xb26bdded, 0x3400010}, | ||
| 7188 | {0x3400000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, | ||
| 7189 | {0x3400000, 0x800002, 0x317285d3, 0x317285d4, 0x3400010}, | ||
| 7190 | {0x3400000, 0x800002, 0x3c9623b1, 0x3c9623b2, 0x3400010}, | ||
| 7191 | {0x3400000, 0x800002, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 7192 | {0x3400000, 0x800002, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 7193 | {0x3400000, 0x1398437, 0x0, 0x1398437, 0x3400000}, | ||
| 7194 | {0x3400000, 0x1398437, 0x1, 0x1398437, 0x3400080}, | ||
| 7195 | {0x3400000, 0x1398437, 0x76, 0x1398437, 0x3400080}, | ||
| 7196 | {0x3400000, 0x1398437, 0x2b94, 0x1398437, 0x3400080}, | ||
| 7197 | {0x3400000, 0x1398437, 0x636d24, 0x1398437, 0x3400080}, | ||
| 7198 | {0x3400000, 0x1398437, 0x7fffff, 0x1398437, 0x3400080}, | ||
| 7199 | {0x3400000, 0x1398437, 0x800000, 0x1798437, 0x3400000}, | ||
| 7200 | {0x3400000, 0x1398437, 0x800002, 0x1798438, 0x3400000}, | ||
| 7201 | {0x3400000, 0x1398437, 0x1398437, 0x1b98437, 0x3400000}, | ||
| 7202 | {0x3400000, 0x1398437, 0xba98d27, 0xba98d2d, 0x3400010}, | ||
| 7203 | {0x3400000, 0x1398437, 0xba98d7a, 0xba98d80, 0x3400010}, | ||
| 7204 | {0x3400000, 0x1398437, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 7205 | {0x3400000, 0x1398437, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 7206 | {0x3400000, 0x1398437, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 7207 | {0x3400000, 0x1398437, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7208 | {0x3400000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7209 | {0x3400000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7210 | {0x3400000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7211 | {0x3400000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7212 | {0x3400000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7213 | {0x3400000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7214 | {0x3400000, 0x1398437, 0x80000000, 0x1398437, 0x3400000}, | ||
| 7215 | {0x3400000, 0x1398437, 0x80000001, 0x1398437, 0x3400080}, | ||
| 7216 | {0x3400000, 0x1398437, 0x80000076, 0x1398437, 0x3400080}, | ||
| 7217 | {0x3400000, 0x1398437, 0x80002b94, 0x1398437, 0x3400080}, | ||
| 7218 | {0x3400000, 0x1398437, 0x80636d24, 0x1398437, 0x3400080}, | ||
| 7219 | {0x3400000, 0x1398437, 0x807fffff, 0x1398437, 0x3400080}, | ||
| 7220 | {0x3400000, 0x1398437, 0x80800000, 0xf3086e, 0x3400000}, | ||
| 7221 | {0x3400000, 0x1398437, 0x80800002, 0xf3086c, 0x3400000}, | ||
| 7222 | {0x3400000, 0x1398437, 0x81398437, 0x0, 0x3400000}, | ||
| 7223 | {0x3400000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3400010}, | ||
| 7224 | {0x3400000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3400010}, | ||
| 7225 | {0x3400000, 0x1398437, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 7226 | {0x3400000, 0x1398437, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 7227 | {0x3400000, 0x1398437, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 7228 | {0x3400000, 0x1398437, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7229 | {0x3400000, 0x1398437, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7230 | {0x3400000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7231 | {0x3400000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7232 | {0x3400000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7233 | {0x3400000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7234 | {0x3400000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7235 | {0x3400000, 0x1398437, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 7236 | {0x3400000, 0x1398437, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 7237 | {0x3400000, 0x1398437, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 7238 | {0x3400000, 0x1398437, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 7239 | {0x3400000, 0x1398437, 0x9503366, 0x9503420, 0x3400010}, | ||
| 7240 | {0x3400000, 0x1398437, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, | ||
| 7241 | {0x3400000, 0x1398437, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 7242 | {0x3400000, 0x1398437, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 7243 | {0x3400000, 0x1398437, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, | ||
| 7244 | {0x3400000, 0x1398437, 0x966320b, 0x96632c5, 0x3400010}, | ||
| 7245 | {0x3400000, 0x1398437, 0xb26bddee, 0xb26bdded, 0x3400010}, | ||
| 7246 | {0x3400000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, | ||
| 7247 | {0x3400000, 0x1398437, 0x317285d3, 0x317285d4, 0x3400010}, | ||
| 7248 | {0x3400000, 0x1398437, 0x3c9623b1, 0x3c9623b2, 0x3400010}, | ||
| 7249 | {0x3400000, 0x1398437, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 7250 | {0x3400000, 0x1398437, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 7251 | {0x3400000, 0xba98d27, 0x0, 0xba98d27, 0x3400000}, | ||
| 7252 | {0x3400000, 0xba98d27, 0x1, 0xba98d27, 0x3400080}, | ||
| 7253 | {0x3400000, 0xba98d27, 0x76, 0xba98d27, 0x3400080}, | ||
| 7254 | {0x3400000, 0xba98d27, 0x2b94, 0xba98d27, 0x3400080}, | ||
| 7255 | {0x3400000, 0xba98d27, 0x636d24, 0xba98d27, 0x3400080}, | ||
| 7256 | {0x3400000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3400080}, | ||
| 7257 | {0x3400000, 0xba98d27, 0x800000, 0xba98d29, 0x3400000}, | ||
| 7258 | {0x3400000, 0xba98d27, 0x800002, 0xba98d2a, 0x3400010}, | ||
| 7259 | {0x3400000, 0xba98d27, 0x1398437, 0xba98d2d, 0x3400010}, | ||
| 7260 | {0x3400000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3400000}, | ||
| 7261 | {0x3400000, 0xba98d27, 0xba98d7a, 0xc298d51, 0x3400010}, | ||
| 7262 | {0x3400000, 0xba98d27, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 7263 | {0x3400000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 7264 | {0x3400000, 0xba98d27, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 7265 | {0x3400000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7266 | {0x3400000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7267 | {0x3400000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7268 | {0x3400000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7269 | {0x3400000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7270 | {0x3400000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7271 | {0x3400000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7272 | {0x3400000, 0xba98d27, 0x80000000, 0xba98d27, 0x3400000}, | ||
| 7273 | {0x3400000, 0xba98d27, 0x80000001, 0xba98d27, 0x3400080}, | ||
| 7274 | {0x3400000, 0xba98d27, 0x80000076, 0xba98d27, 0x3400080}, | ||
| 7275 | {0x3400000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3400080}, | ||
| 7276 | {0x3400000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3400080}, | ||
| 7277 | {0x3400000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3400080}, | ||
| 7278 | {0x3400000, 0xba98d27, 0x80800000, 0xba98d25, 0x3400000}, | ||
| 7279 | {0x3400000, 0xba98d27, 0x80800002, 0xba98d25, 0x3400010}, | ||
| 7280 | {0x3400000, 0xba98d27, 0x81398437, 0xba98d22, 0x3400010}, | ||
| 7281 | {0x3400000, 0xba98d27, 0x8ba98d27, 0x0, 0x3400000}, | ||
| 7282 | {0x3400000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3400000}, | ||
| 7283 | {0x3400000, 0xba98d27, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 7284 | {0x3400000, 0xba98d27, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 7285 | {0x3400000, 0xba98d27, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 7286 | {0x3400000, 0xba98d27, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7287 | {0x3400000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7288 | {0x3400000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7289 | {0x3400000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7290 | {0x3400000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7291 | {0x3400000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7292 | {0x3400000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7293 | {0x3400000, 0xba98d27, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 7294 | {0x3400000, 0xba98d27, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 7295 | {0x3400000, 0xba98d27, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 7296 | {0x3400000, 0xba98d27, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 7297 | {0x3400000, 0xba98d27, 0x9503366, 0xbb00ec3, 0x3400010}, | ||
| 7298 | {0x3400000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, | ||
| 7299 | {0x3400000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 7300 | {0x3400000, 0xba98d27, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 7301 | {0x3400000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, | ||
| 7302 | {0x3400000, 0xba98d27, 0x966320b, 0xbb0beb8, 0x3400010}, | ||
| 7303 | {0x3400000, 0xba98d27, 0xb26bddee, 0xb26bdded, 0x3400010}, | ||
| 7304 | {0x3400000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, | ||
| 7305 | {0x3400000, 0xba98d27, 0x317285d3, 0x317285d4, 0x3400010}, | ||
| 7306 | {0x3400000, 0xba98d27, 0x3c9623b1, 0x3c9623b2, 0x3400010}, | ||
| 7307 | {0x3400000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 7308 | {0x3400000, 0xba98d27, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 7309 | {0x3400000, 0xba98d7a, 0x0, 0xba98d7a, 0x3400000}, | ||
| 7310 | {0x3400000, 0xba98d7a, 0x1, 0xba98d7a, 0x3400080}, | ||
| 7311 | {0x3400000, 0xba98d7a, 0x76, 0xba98d7a, 0x3400080}, | ||
| 7312 | {0x3400000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3400080}, | ||
| 7313 | {0x3400000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3400080}, | ||
| 7314 | {0x3400000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3400080}, | ||
| 7315 | {0x3400000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3400000}, | ||
| 7316 | {0x3400000, 0xba98d7a, 0x800002, 0xba98d7d, 0x3400010}, | ||
| 7317 | {0x3400000, 0xba98d7a, 0x1398437, 0xba98d80, 0x3400010}, | ||
| 7318 | {0x3400000, 0xba98d7a, 0xba98d27, 0xc298d51, 0x3400010}, | ||
| 7319 | {0x3400000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3400000}, | ||
| 7320 | {0x3400000, 0xba98d7a, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 7321 | {0x3400000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 7322 | {0x3400000, 0xba98d7a, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 7323 | {0x3400000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7324 | {0x3400000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7325 | {0x3400000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7326 | {0x3400000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7327 | {0x3400000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7328 | {0x3400000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7329 | {0x3400000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7330 | {0x3400000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3400000}, | ||
| 7331 | {0x3400000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3400080}, | ||
| 7332 | {0x3400000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3400080}, | ||
| 7333 | {0x3400000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3400080}, | ||
| 7334 | {0x3400000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3400080}, | ||
| 7335 | {0x3400000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3400080}, | ||
| 7336 | {0x3400000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3400000}, | ||
| 7337 | {0x3400000, 0xba98d7a, 0x80800002, 0xba98d78, 0x3400010}, | ||
| 7338 | {0x3400000, 0xba98d7a, 0x81398437, 0xba98d75, 0x3400010}, | ||
| 7339 | {0x3400000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3400000}, | ||
| 7340 | {0x3400000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3400000}, | ||
| 7341 | {0x3400000, 0xba98d7a, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 7342 | {0x3400000, 0xba98d7a, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 7343 | {0x3400000, 0xba98d7a, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 7344 | {0x3400000, 0xba98d7a, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7345 | {0x3400000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7346 | {0x3400000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7347 | {0x3400000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7348 | {0x3400000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7349 | {0x3400000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7350 | {0x3400000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7351 | {0x3400000, 0xba98d7a, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 7352 | {0x3400000, 0xba98d7a, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 7353 | {0x3400000, 0xba98d7a, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 7354 | {0x3400000, 0xba98d7a, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 7355 | {0x3400000, 0xba98d7a, 0x9503366, 0xbb00f16, 0x3400010}, | ||
| 7356 | {0x3400000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, | ||
| 7357 | {0x3400000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 7358 | {0x3400000, 0xba98d7a, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 7359 | {0x3400000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, | ||
| 7360 | {0x3400000, 0xba98d7a, 0x966320b, 0xbb0bf0b, 0x3400010}, | ||
| 7361 | {0x3400000, 0xba98d7a, 0xb26bddee, 0xb26bdded, 0x3400010}, | ||
| 7362 | {0x3400000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, | ||
| 7363 | {0x3400000, 0xba98d7a, 0x317285d3, 0x317285d4, 0x3400010}, | ||
| 7364 | {0x3400000, 0xba98d7a, 0x3c9623b1, 0x3c9623b2, 0x3400010}, | ||
| 7365 | {0x3400000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 7366 | {0x3400000, 0xba98d7a, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 7367 | {0x3400000, 0x751f853a, 0x0, 0x751f853a, 0x3400000}, | ||
| 7368 | {0x3400000, 0x751f853a, 0x1, 0x751f853a, 0x3400080}, | ||
| 7369 | {0x3400000, 0x751f853a, 0x76, 0x751f853a, 0x3400080}, | ||
| 7370 | {0x3400000, 0x751f853a, 0x2b94, 0x751f853a, 0x3400080}, | ||
| 7371 | {0x3400000, 0x751f853a, 0x636d24, 0x751f853a, 0x3400080}, | ||
| 7372 | {0x3400000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3400080}, | ||
| 7373 | {0x3400000, 0x751f853a, 0x800000, 0x751f853b, 0x3400010}, | ||
| 7374 | {0x3400000, 0x751f853a, 0x800002, 0x751f853b, 0x3400010}, | ||
| 7375 | {0x3400000, 0x751f853a, 0x1398437, 0x751f853b, 0x3400010}, | ||
| 7376 | {0x3400000, 0x751f853a, 0xba98d27, 0x751f853b, 0x3400010}, | ||
| 7377 | {0x3400000, 0x751f853a, 0xba98d7a, 0x751f853b, 0x3400010}, | ||
| 7378 | {0x3400000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3400000}, | ||
| 7379 | {0x3400000, 0x751f853a, 0x7f7ffff0, 0x7f7ffffa, 0x3400010}, | ||
| 7380 | {0x3400000, 0x751f853a, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 7381 | {0x3400000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7382 | {0x3400000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7383 | {0x3400000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7384 | {0x3400000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7385 | {0x3400000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7386 | {0x3400000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7387 | {0x3400000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7388 | {0x3400000, 0x751f853a, 0x80000000, 0x751f853a, 0x3400000}, | ||
| 7389 | {0x3400000, 0x751f853a, 0x80000001, 0x751f853a, 0x3400080}, | ||
| 7390 | {0x3400000, 0x751f853a, 0x80000076, 0x751f853a, 0x3400080}, | ||
| 7391 | {0x3400000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3400080}, | ||
| 7392 | {0x3400000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3400080}, | ||
| 7393 | {0x3400000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3400080}, | ||
| 7394 | {0x3400000, 0x751f853a, 0x80800000, 0x751f853a, 0x3400010}, | ||
| 7395 | {0x3400000, 0x751f853a, 0x80800002, 0x751f853a, 0x3400010}, | ||
| 7396 | {0x3400000, 0x751f853a, 0x81398437, 0x751f853a, 0x3400010}, | ||
| 7397 | {0x3400000, 0x751f853a, 0x8ba98d27, 0x751f853a, 0x3400010}, | ||
| 7398 | {0x3400000, 0x751f853a, 0x8ba98d7a, 0x751f853a, 0x3400010}, | ||
| 7399 | {0x3400000, 0x751f853a, 0xf51f853a, 0x0, 0x3400000}, | ||
| 7400 | {0x3400000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3400010}, | ||
| 7401 | {0x3400000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3400010}, | ||
| 7402 | {0x3400000, 0x751f853a, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7403 | {0x3400000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7404 | {0x3400000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7405 | {0x3400000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7406 | {0x3400000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7407 | {0x3400000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7408 | {0x3400000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7409 | {0x3400000, 0x751f853a, 0x4f3495cb, 0x751f853b, 0x3400010}, | ||
| 7410 | {0x3400000, 0x751f853a, 0xe73a5134, 0x751f853a, 0x3400010}, | ||
| 7411 | {0x3400000, 0x751f853a, 0x7c994e9e, 0x7c994fde, 0x3400010}, | ||
| 7412 | {0x3400000, 0x751f853a, 0x6164bd6c, 0x751f853b, 0x3400010}, | ||
| 7413 | {0x3400000, 0x751f853a, 0x9503366, 0x751f853b, 0x3400010}, | ||
| 7414 | {0x3400000, 0x751f853a, 0xbf5a97c9, 0x751f853a, 0x3400010}, | ||
| 7415 | {0x3400000, 0x751f853a, 0xe6ff1a14, 0x751f853a, 0x3400010}, | ||
| 7416 | {0x3400000, 0x751f853a, 0x77f31e2f, 0x77f81a59, 0x3400010}, | ||
| 7417 | {0x3400000, 0x751f853a, 0xaab4d7d8, 0x751f853a, 0x3400010}, | ||
| 7418 | {0x3400000, 0x751f853a, 0x966320b, 0x751f853b, 0x3400010}, | ||
| 7419 | {0x3400000, 0x751f853a, 0xb26bddee, 0x751f853a, 0x3400010}, | ||
| 7420 | {0x3400000, 0x751f853a, 0xb5c8e5d3, 0x751f853a, 0x3400010}, | ||
| 7421 | {0x3400000, 0x751f853a, 0x317285d3, 0x751f853b, 0x3400010}, | ||
| 7422 | {0x3400000, 0x751f853a, 0x3c9623b1, 0x751f853b, 0x3400010}, | ||
| 7423 | {0x3400000, 0x751f853a, 0x51fd2c7c, 0x751f853b, 0x3400010}, | ||
| 7424 | {0x3400000, 0x751f853a, 0x7b906a6c, 0x7b906f69, 0x3400010}, | ||
| 7425 | {0x3400000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3400000}, | ||
| 7426 | {0x3400000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3400080}, | ||
| 7427 | {0x3400000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3400080}, | ||
| 7428 | {0x3400000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3400080}, | ||
| 7429 | {0x3400000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3400080}, | ||
| 7430 | {0x3400000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3400080}, | ||
| 7431 | {0x3400000, 0x7f7ffff0, 0x800000, 0x7f7ffff1, 0x3400010}, | ||
| 7432 | {0x3400000, 0x7f7ffff0, 0x800002, 0x7f7ffff1, 0x3400010}, | ||
| 7433 | {0x3400000, 0x7f7ffff0, 0x1398437, 0x7f7ffff1, 0x3400010}, | ||
| 7434 | {0x3400000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff1, 0x3400010}, | ||
| 7435 | {0x3400000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff1, 0x3400010}, | ||
| 7436 | {0x3400000, 0x7f7ffff0, 0x751f853a, 0x7f7ffffa, 0x3400010}, | ||
| 7437 | {0x3400000, 0x7f7ffff0, 0x7f7ffff0, 0x7f800000, 0x3400014}, | ||
| 7438 | {0x3400000, 0x7f7ffff0, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 7439 | {0x3400000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7440 | {0x3400000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7441 | {0x3400000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7442 | {0x3400000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7443 | {0x3400000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7444 | {0x3400000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7445 | {0x3400000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7446 | {0x3400000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3400000}, | ||
| 7447 | {0x3400000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3400080}, | ||
| 7448 | {0x3400000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3400080}, | ||
| 7449 | {0x3400000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3400080}, | ||
| 7450 | {0x3400000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3400080}, | ||
| 7451 | {0x3400000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3400080}, | ||
| 7452 | {0x3400000, 0x7f7ffff0, 0x80800000, 0x7f7ffff0, 0x3400010}, | ||
| 7453 | {0x3400000, 0x7f7ffff0, 0x80800002, 0x7f7ffff0, 0x3400010}, | ||
| 7454 | {0x3400000, 0x7f7ffff0, 0x81398437, 0x7f7ffff0, 0x3400010}, | ||
| 7455 | {0x3400000, 0x7f7ffff0, 0x8ba98d27, 0x7f7ffff0, 0x3400010}, | ||
| 7456 | {0x3400000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7ffff0, 0x3400010}, | ||
| 7457 | {0x3400000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe7, 0x3400010}, | ||
| 7458 | {0x3400000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3400000}, | ||
| 7459 | {0x3400000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3400000}, | ||
| 7460 | {0x3400000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7461 | {0x3400000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7462 | {0x3400000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7463 | {0x3400000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7464 | {0x3400000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7465 | {0x3400000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7466 | {0x3400000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7467 | {0x3400000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff1, 0x3400010}, | ||
| 7468 | {0x3400000, 0x7f7ffff0, 0xe73a5134, 0x7f7ffff0, 0x3400010}, | ||
| 7469 | {0x3400000, 0x7f7ffff0, 0x7c994e9e, 0x7f800000, 0x3400014}, | ||
| 7470 | {0x3400000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff1, 0x3400010}, | ||
| 7471 | {0x3400000, 0x7f7ffff0, 0x9503366, 0x7f7ffff1, 0x3400010}, | ||
| 7472 | {0x3400000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7ffff0, 0x3400010}, | ||
| 7473 | {0x3400000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7ffff0, 0x3400010}, | ||
| 7474 | {0x3400000, 0x7f7ffff0, 0x77f31e2f, 0x7f800000, 0x3400014}, | ||
| 7475 | {0x3400000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7ffff0, 0x3400010}, | ||
| 7476 | {0x3400000, 0x7f7ffff0, 0x966320b, 0x7f7ffff1, 0x3400010}, | ||
| 7477 | {0x3400000, 0x7f7ffff0, 0xb26bddee, 0x7f7ffff0, 0x3400010}, | ||
| 7478 | {0x3400000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7ffff0, 0x3400010}, | ||
| 7479 | {0x3400000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff1, 0x3400010}, | ||
| 7480 | {0x3400000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff1, 0x3400010}, | ||
| 7481 | {0x3400000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff1, 0x3400010}, | ||
| 7482 | {0x3400000, 0x7f7ffff0, 0x7b906a6c, 0x7f800000, 0x3400014}, | ||
| 7483 | {0x3400000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3400000}, | ||
| 7484 | {0x3400000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3400080}, | ||
| 7485 | {0x3400000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3400080}, | ||
| 7486 | {0x3400000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3400080}, | ||
| 7487 | {0x3400000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3400080}, | ||
| 7488 | {0x3400000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3400080}, | ||
| 7489 | {0x3400000, 0x7f7fffff, 0x800000, 0x7f800000, 0x3400014}, | ||
| 7490 | {0x3400000, 0x7f7fffff, 0x800002, 0x7f800000, 0x3400014}, | ||
| 7491 | {0x3400000, 0x7f7fffff, 0x1398437, 0x7f800000, 0x3400014}, | ||
| 7492 | {0x3400000, 0x7f7fffff, 0xba98d27, 0x7f800000, 0x3400014}, | ||
| 7493 | {0x3400000, 0x7f7fffff, 0xba98d7a, 0x7f800000, 0x3400014}, | ||
| 7494 | {0x3400000, 0x7f7fffff, 0x751f853a, 0x7f800000, 0x3400014}, | ||
| 7495 | {0x3400000, 0x7f7fffff, 0x7f7ffff0, 0x7f800000, 0x3400014}, | ||
| 7496 | {0x3400000, 0x7f7fffff, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 7497 | {0x3400000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7498 | {0x3400000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7499 | {0x3400000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7500 | {0x3400000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7501 | {0x3400000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7502 | {0x3400000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7503 | {0x3400000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7504 | {0x3400000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3400000}, | ||
| 7505 | {0x3400000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3400080}, | ||
| 7506 | {0x3400000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3400080}, | ||
| 7507 | {0x3400000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3400080}, | ||
| 7508 | {0x3400000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3400080}, | ||
| 7509 | {0x3400000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3400080}, | ||
| 7510 | {0x3400000, 0x7f7fffff, 0x80800000, 0x7f7fffff, 0x3400010}, | ||
| 7511 | {0x3400000, 0x7f7fffff, 0x80800002, 0x7f7fffff, 0x3400010}, | ||
| 7512 | {0x3400000, 0x7f7fffff, 0x81398437, 0x7f7fffff, 0x3400010}, | ||
| 7513 | {0x3400000, 0x7f7fffff, 0x8ba98d27, 0x7f7fffff, 0x3400010}, | ||
| 7514 | {0x3400000, 0x7f7fffff, 0x8ba98d7a, 0x7f7fffff, 0x3400010}, | ||
| 7515 | {0x3400000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff6, 0x3400010}, | ||
| 7516 | {0x3400000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3400000}, | ||
| 7517 | {0x3400000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3400000}, | ||
| 7518 | {0x3400000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7519 | {0x3400000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7520 | {0x3400000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7521 | {0x3400000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7522 | {0x3400000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7523 | {0x3400000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7524 | {0x3400000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7525 | {0x3400000, 0x7f7fffff, 0x4f3495cb, 0x7f800000, 0x3400014}, | ||
| 7526 | {0x3400000, 0x7f7fffff, 0xe73a5134, 0x7f7fffff, 0x3400010}, | ||
| 7527 | {0x3400000, 0x7f7fffff, 0x7c994e9e, 0x7f800000, 0x3400014}, | ||
| 7528 | {0x3400000, 0x7f7fffff, 0x6164bd6c, 0x7f800000, 0x3400014}, | ||
| 7529 | {0x3400000, 0x7f7fffff, 0x9503366, 0x7f800000, 0x3400014}, | ||
| 7530 | {0x3400000, 0x7f7fffff, 0xbf5a97c9, 0x7f7fffff, 0x3400010}, | ||
| 7531 | {0x3400000, 0x7f7fffff, 0xe6ff1a14, 0x7f7fffff, 0x3400010}, | ||
| 7532 | {0x3400000, 0x7f7fffff, 0x77f31e2f, 0x7f800000, 0x3400014}, | ||
| 7533 | {0x3400000, 0x7f7fffff, 0xaab4d7d8, 0x7f7fffff, 0x3400010}, | ||
| 7534 | {0x3400000, 0x7f7fffff, 0x966320b, 0x7f800000, 0x3400014}, | ||
| 7535 | {0x3400000, 0x7f7fffff, 0xb26bddee, 0x7f7fffff, 0x3400010}, | ||
| 7536 | {0x3400000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7fffff, 0x3400010}, | ||
| 7537 | {0x3400000, 0x7f7fffff, 0x317285d3, 0x7f800000, 0x3400014}, | ||
| 7538 | {0x3400000, 0x7f7fffff, 0x3c9623b1, 0x7f800000, 0x3400014}, | ||
| 7539 | {0x3400000, 0x7f7fffff, 0x51fd2c7c, 0x7f800000, 0x3400014}, | ||
| 7540 | {0x3400000, 0x7f7fffff, 0x7b906a6c, 0x7f800000, 0x3400014}, | ||
| 7541 | {0x3400000, 0x7f800000, 0x0, 0x7f800000, 0x3400000}, | ||
| 7542 | {0x3400000, 0x7f800000, 0x1, 0x7f800000, 0x3400080}, | ||
| 7543 | {0x3400000, 0x7f800000, 0x76, 0x7f800000, 0x3400080}, | ||
| 7544 | {0x3400000, 0x7f800000, 0x2b94, 0x7f800000, 0x3400080}, | ||
| 7545 | {0x3400000, 0x7f800000, 0x636d24, 0x7f800000, 0x3400080}, | ||
| 7546 | {0x3400000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3400080}, | ||
| 7547 | {0x3400000, 0x7f800000, 0x800000, 0x7f800000, 0x3400000}, | ||
| 7548 | {0x3400000, 0x7f800000, 0x800002, 0x7f800000, 0x3400000}, | ||
| 7549 | {0x3400000, 0x7f800000, 0x1398437, 0x7f800000, 0x3400000}, | ||
| 7550 | {0x3400000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3400000}, | ||
| 7551 | {0x3400000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3400000}, | ||
| 7552 | {0x3400000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3400000}, | ||
| 7553 | {0x3400000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3400000}, | ||
| 7554 | {0x3400000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3400000}, | ||
| 7555 | {0x3400000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7556 | {0x3400000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7557 | {0x3400000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7558 | {0x3400000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7559 | {0x3400000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7560 | {0x3400000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7561 | {0x3400000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7562 | {0x3400000, 0x7f800000, 0x80000000, 0x7f800000, 0x3400000}, | ||
| 7563 | {0x3400000, 0x7f800000, 0x80000001, 0x7f800000, 0x3400080}, | ||
| 7564 | {0x3400000, 0x7f800000, 0x80000076, 0x7f800000, 0x3400080}, | ||
| 7565 | {0x3400000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3400080}, | ||
| 7566 | {0x3400000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3400080}, | ||
| 7567 | {0x3400000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3400080}, | ||
| 7568 | {0x3400000, 0x7f800000, 0x80800000, 0x7f800000, 0x3400000}, | ||
| 7569 | {0x3400000, 0x7f800000, 0x80800002, 0x7f800000, 0x3400000}, | ||
| 7570 | {0x3400000, 0x7f800000, 0x81398437, 0x7f800000, 0x3400000}, | ||
| 7571 | {0x3400000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3400000}, | ||
| 7572 | {0x3400000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3400000}, | ||
| 7573 | {0x3400000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3400000}, | ||
| 7574 | {0x3400000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3400000}, | ||
| 7575 | {0x3400000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3400000}, | ||
| 7576 | {0x3400000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3400001}, | ||
| 7577 | {0x3400000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7578 | {0x3400000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7579 | {0x3400000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7580 | {0x3400000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7581 | {0x3400000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7582 | {0x3400000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7583 | {0x3400000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3400000}, | ||
| 7584 | {0x3400000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3400000}, | ||
| 7585 | {0x3400000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3400000}, | ||
| 7586 | {0x3400000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3400000}, | ||
| 7587 | {0x3400000, 0x7f800000, 0x9503366, 0x7f800000, 0x3400000}, | ||
| 7588 | {0x3400000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3400000}, | ||
| 7589 | {0x3400000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3400000}, | ||
| 7590 | {0x3400000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3400000}, | ||
| 7591 | {0x3400000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3400000}, | ||
| 7592 | {0x3400000, 0x7f800000, 0x966320b, 0x7f800000, 0x3400000}, | ||
| 7593 | {0x3400000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3400000}, | ||
| 7594 | {0x3400000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3400000}, | ||
| 7595 | {0x3400000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3400000}, | ||
| 7596 | {0x3400000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3400000}, | ||
| 7597 | {0x3400000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3400000}, | ||
| 7598 | {0x3400000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3400000}, | ||
| 7599 | {0x3400000, 0x7f800001, 0x0, 0x7fc00000, 0x3400001}, | ||
| 7600 | {0x3400000, 0x7f800001, 0x1, 0x7fc00000, 0x3400081}, | ||
| 7601 | {0x3400000, 0x7f800001, 0x76, 0x7fc00000, 0x3400081}, | ||
| 7602 | {0x3400000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3400081}, | ||
| 7603 | {0x3400000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3400081}, | ||
| 7604 | {0x3400000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3400081}, | ||
| 7605 | {0x3400000, 0x7f800001, 0x800000, 0x7fc00000, 0x3400001}, | ||
| 7606 | {0x3400000, 0x7f800001, 0x800002, 0x7fc00000, 0x3400001}, | ||
| 7607 | {0x3400000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3400001}, | ||
| 7608 | {0x3400000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3400001}, | ||
| 7609 | {0x3400000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3400001}, | ||
| 7610 | {0x3400000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3400001}, | ||
| 7611 | {0x3400000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3400001}, | ||
| 7612 | {0x3400000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3400001}, | ||
| 7613 | {0x3400000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3400001}, | ||
| 7614 | {0x3400000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7615 | {0x3400000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7616 | {0x3400000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7617 | {0x3400000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3400001}, | ||
| 7618 | {0x3400000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3400001}, | ||
| 7619 | {0x3400000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3400001}, | ||
| 7620 | {0x3400000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3400001}, | ||
| 7621 | {0x3400000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3400081}, | ||
| 7622 | {0x3400000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3400081}, | ||
| 7623 | {0x3400000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3400081}, | ||
| 7624 | {0x3400000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3400081}, | ||
| 7625 | {0x3400000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3400081}, | ||
| 7626 | {0x3400000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3400001}, | ||
| 7627 | {0x3400000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3400001}, | ||
| 7628 | {0x3400000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3400001}, | ||
| 7629 | {0x3400000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3400001}, | ||
| 7630 | {0x3400000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3400001}, | ||
| 7631 | {0x3400000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3400001}, | ||
| 7632 | {0x3400000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3400001}, | ||
| 7633 | {0x3400000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3400001}, | ||
| 7634 | {0x3400000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3400001}, | ||
| 7635 | {0x3400000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7636 | {0x3400000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7637 | {0x3400000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7638 | {0x3400000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3400001}, | ||
| 7639 | {0x3400000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3400001}, | ||
| 7640 | {0x3400000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3400001}, | ||
| 7641 | {0x3400000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3400001}, | ||
| 7642 | {0x3400000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3400001}, | ||
| 7643 | {0x3400000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3400001}, | ||
| 7644 | {0x3400000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3400001}, | ||
| 7645 | {0x3400000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3400001}, | ||
| 7646 | {0x3400000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3400001}, | ||
| 7647 | {0x3400000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3400001}, | ||
| 7648 | {0x3400000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3400001}, | ||
| 7649 | {0x3400000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3400001}, | ||
| 7650 | {0x3400000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3400001}, | ||
| 7651 | {0x3400000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3400001}, | ||
| 7652 | {0x3400000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, | ||
| 7653 | {0x3400000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3400001}, | ||
| 7654 | {0x3400000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3400001}, | ||
| 7655 | {0x3400000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3400001}, | ||
| 7656 | {0x3400000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3400001}, | ||
| 7657 | {0x3400000, 0x7f984a37, 0x0, 0x7fc00000, 0x3400001}, | ||
| 7658 | {0x3400000, 0x7f984a37, 0x1, 0x7fc00000, 0x3400081}, | ||
| 7659 | {0x3400000, 0x7f984a37, 0x76, 0x7fc00000, 0x3400081}, | ||
| 7660 | {0x3400000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3400081}, | ||
| 7661 | {0x3400000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3400081}, | ||
| 7662 | {0x3400000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3400081}, | ||
| 7663 | {0x3400000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3400001}, | ||
| 7664 | {0x3400000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3400001}, | ||
| 7665 | {0x3400000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3400001}, | ||
| 7666 | {0x3400000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3400001}, | ||
| 7667 | {0x3400000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3400001}, | ||
| 7668 | {0x3400000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3400001}, | ||
| 7669 | {0x3400000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3400001}, | ||
| 7670 | {0x3400000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3400001}, | ||
| 7671 | {0x3400000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3400001}, | ||
| 7672 | {0x3400000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7673 | {0x3400000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7674 | {0x3400000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7675 | {0x3400000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3400001}, | ||
| 7676 | {0x3400000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3400001}, | ||
| 7677 | {0x3400000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3400001}, | ||
| 7678 | {0x3400000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3400001}, | ||
| 7679 | {0x3400000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3400081}, | ||
| 7680 | {0x3400000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3400081}, | ||
| 7681 | {0x3400000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3400081}, | ||
| 7682 | {0x3400000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3400081}, | ||
| 7683 | {0x3400000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3400081}, | ||
| 7684 | {0x3400000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3400001}, | ||
| 7685 | {0x3400000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3400001}, | ||
| 7686 | {0x3400000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3400001}, | ||
| 7687 | {0x3400000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3400001}, | ||
| 7688 | {0x3400000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3400001}, | ||
| 7689 | {0x3400000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3400001}, | ||
| 7690 | {0x3400000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3400001}, | ||
| 7691 | {0x3400000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3400001}, | ||
| 7692 | {0x3400000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3400001}, | ||
| 7693 | {0x3400000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7694 | {0x3400000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7695 | {0x3400000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7696 | {0x3400000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3400001}, | ||
| 7697 | {0x3400000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3400001}, | ||
| 7698 | {0x3400000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3400001}, | ||
| 7699 | {0x3400000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3400001}, | ||
| 7700 | {0x3400000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3400001}, | ||
| 7701 | {0x3400000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3400001}, | ||
| 7702 | {0x3400000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3400001}, | ||
| 7703 | {0x3400000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3400001}, | ||
| 7704 | {0x3400000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3400001}, | ||
| 7705 | {0x3400000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3400001}, | ||
| 7706 | {0x3400000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3400001}, | ||
| 7707 | {0x3400000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3400001}, | ||
| 7708 | {0x3400000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3400001}, | ||
| 7709 | {0x3400000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3400001}, | ||
| 7710 | {0x3400000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, | ||
| 7711 | {0x3400000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3400001}, | ||
| 7712 | {0x3400000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3400001}, | ||
| 7713 | {0x3400000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3400001}, | ||
| 7714 | {0x3400000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3400001}, | ||
| 7715 | {0x3400000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3400001}, | ||
| 7716 | {0x3400000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3400081}, | ||
| 7717 | {0x3400000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3400081}, | ||
| 7718 | {0x3400000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3400081}, | ||
| 7719 | {0x3400000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3400081}, | ||
| 7720 | {0x3400000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3400081}, | ||
| 7721 | {0x3400000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3400001}, | ||
| 7722 | {0x3400000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3400001}, | ||
| 7723 | {0x3400000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3400001}, | ||
| 7724 | {0x3400000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3400001}, | ||
| 7725 | {0x3400000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3400001}, | ||
| 7726 | {0x3400000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3400001}, | ||
| 7727 | {0x3400000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3400001}, | ||
| 7728 | {0x3400000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3400001}, | ||
| 7729 | {0x3400000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3400001}, | ||
| 7730 | {0x3400000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7731 | {0x3400000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7732 | {0x3400000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7733 | {0x3400000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3400001}, | ||
| 7734 | {0x3400000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3400001}, | ||
| 7735 | {0x3400000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3400001}, | ||
| 7736 | {0x3400000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3400001}, | ||
| 7737 | {0x3400000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3400081}, | ||
| 7738 | {0x3400000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3400081}, | ||
| 7739 | {0x3400000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3400081}, | ||
| 7740 | {0x3400000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3400081}, | ||
| 7741 | {0x3400000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3400081}, | ||
| 7742 | {0x3400000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3400001}, | ||
| 7743 | {0x3400000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3400001}, | ||
| 7744 | {0x3400000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3400001}, | ||
| 7745 | {0x3400000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3400001}, | ||
| 7746 | {0x3400000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3400001}, | ||
| 7747 | {0x3400000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3400001}, | ||
| 7748 | {0x3400000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3400001}, | ||
| 7749 | {0x3400000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3400001}, | ||
| 7750 | {0x3400000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3400001}, | ||
| 7751 | {0x3400000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7752 | {0x3400000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7753 | {0x3400000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7754 | {0x3400000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3400001}, | ||
| 7755 | {0x3400000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3400001}, | ||
| 7756 | {0x3400000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3400001}, | ||
| 7757 | {0x3400000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3400001}, | ||
| 7758 | {0x3400000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3400001}, | ||
| 7759 | {0x3400000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3400001}, | ||
| 7760 | {0x3400000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3400001}, | ||
| 7761 | {0x3400000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3400001}, | ||
| 7762 | {0x3400000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3400001}, | ||
| 7763 | {0x3400000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3400001}, | ||
| 7764 | {0x3400000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3400001}, | ||
| 7765 | {0x3400000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3400001}, | ||
| 7766 | {0x3400000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3400001}, | ||
| 7767 | {0x3400000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3400001}, | ||
| 7768 | {0x3400000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, | ||
| 7769 | {0x3400000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3400001}, | ||
| 7770 | {0x3400000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3400001}, | ||
| 7771 | {0x3400000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3400001}, | ||
| 7772 | {0x3400000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3400001}, | ||
| 7773 | {0x3400000, 0x7fc00000, 0x0, 0x7fc00000, 0x3400000}, | ||
| 7774 | {0x3400000, 0x7fc00000, 0x1, 0x7fc00000, 0x3400080}, | ||
| 7775 | {0x3400000, 0x7fc00000, 0x76, 0x7fc00000, 0x3400080}, | ||
| 7776 | {0x3400000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3400080}, | ||
| 7777 | {0x3400000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3400080}, | ||
| 7778 | {0x3400000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3400080}, | ||
| 7779 | {0x3400000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3400000}, | ||
| 7780 | {0x3400000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3400000}, | ||
| 7781 | {0x3400000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3400000}, | ||
| 7782 | {0x3400000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3400000}, | ||
| 7783 | {0x3400000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3400000}, | ||
| 7784 | {0x3400000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3400000}, | ||
| 7785 | {0x3400000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3400000}, | ||
| 7786 | {0x3400000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3400000}, | ||
| 7787 | {0x3400000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3400000}, | ||
| 7788 | {0x3400000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7789 | {0x3400000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7790 | {0x3400000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7791 | {0x3400000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7792 | {0x3400000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7793 | {0x3400000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7794 | {0x3400000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3400000}, | ||
| 7795 | {0x3400000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3400080}, | ||
| 7796 | {0x3400000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3400080}, | ||
| 7797 | {0x3400000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3400080}, | ||
| 7798 | {0x3400000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3400080}, | ||
| 7799 | {0x3400000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3400080}, | ||
| 7800 | {0x3400000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3400000}, | ||
| 7801 | {0x3400000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3400000}, | ||
| 7802 | {0x3400000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3400000}, | ||
| 7803 | {0x3400000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3400000}, | ||
| 7804 | {0x3400000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3400000}, | ||
| 7805 | {0x3400000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3400000}, | ||
| 7806 | {0x3400000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3400000}, | ||
| 7807 | {0x3400000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3400000}, | ||
| 7808 | {0x3400000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3400000}, | ||
| 7809 | {0x3400000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7810 | {0x3400000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7811 | {0x3400000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7812 | {0x3400000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7813 | {0x3400000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7814 | {0x3400000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7815 | {0x3400000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3400000}, | ||
| 7816 | {0x3400000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3400000}, | ||
| 7817 | {0x3400000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3400000}, | ||
| 7818 | {0x3400000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3400000}, | ||
| 7819 | {0x3400000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3400000}, | ||
| 7820 | {0x3400000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3400000}, | ||
| 7821 | {0x3400000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3400000}, | ||
| 7822 | {0x3400000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3400000}, | ||
| 7823 | {0x3400000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3400000}, | ||
| 7824 | {0x3400000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3400000}, | ||
| 7825 | {0x3400000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3400000}, | ||
| 7826 | {0x3400000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, | ||
| 7827 | {0x3400000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3400000}, | ||
| 7828 | {0x3400000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3400000}, | ||
| 7829 | {0x3400000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3400000}, | ||
| 7830 | {0x3400000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3400000}, | ||
| 7831 | {0x3400000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3400000}, | ||
| 7832 | {0x3400000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3400080}, | ||
| 7833 | {0x3400000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3400080}, | ||
| 7834 | {0x3400000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3400080}, | ||
| 7835 | {0x3400000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3400080}, | ||
| 7836 | {0x3400000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3400080}, | ||
| 7837 | {0x3400000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3400000}, | ||
| 7838 | {0x3400000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3400000}, | ||
| 7839 | {0x3400000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3400000}, | ||
| 7840 | {0x3400000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3400000}, | ||
| 7841 | {0x3400000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3400000}, | ||
| 7842 | {0x3400000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3400000}, | ||
| 7843 | {0x3400000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3400000}, | ||
| 7844 | {0x3400000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3400000}, | ||
| 7845 | {0x3400000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3400000}, | ||
| 7846 | {0x3400000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7847 | {0x3400000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7848 | {0x3400000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7849 | {0x3400000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7850 | {0x3400000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7851 | {0x3400000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7852 | {0x3400000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3400000}, | ||
| 7853 | {0x3400000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3400080}, | ||
| 7854 | {0x3400000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3400080}, | ||
| 7855 | {0x3400000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3400080}, | ||
| 7856 | {0x3400000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3400080}, | ||
| 7857 | {0x3400000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3400080}, | ||
| 7858 | {0x3400000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3400000}, | ||
| 7859 | {0x3400000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3400000}, | ||
| 7860 | {0x3400000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3400000}, | ||
| 7861 | {0x3400000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3400000}, | ||
| 7862 | {0x3400000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3400000}, | ||
| 7863 | {0x3400000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3400000}, | ||
| 7864 | {0x3400000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3400000}, | ||
| 7865 | {0x3400000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3400000}, | ||
| 7866 | {0x3400000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3400000}, | ||
| 7867 | {0x3400000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7868 | {0x3400000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7869 | {0x3400000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7870 | {0x3400000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7871 | {0x3400000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7872 | {0x3400000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7873 | {0x3400000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3400000}, | ||
| 7874 | {0x3400000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3400000}, | ||
| 7875 | {0x3400000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3400000}, | ||
| 7876 | {0x3400000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3400000}, | ||
| 7877 | {0x3400000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3400000}, | ||
| 7878 | {0x3400000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3400000}, | ||
| 7879 | {0x3400000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3400000}, | ||
| 7880 | {0x3400000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3400000}, | ||
| 7881 | {0x3400000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3400000}, | ||
| 7882 | {0x3400000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3400000}, | ||
| 7883 | {0x3400000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3400000}, | ||
| 7884 | {0x3400000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, | ||
| 7885 | {0x3400000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3400000}, | ||
| 7886 | {0x3400000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3400000}, | ||
| 7887 | {0x3400000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3400000}, | ||
| 7888 | {0x3400000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3400000}, | ||
| 7889 | {0x3400000, 0x7fffffff, 0x0, 0x7fc00000, 0x3400000}, | ||
| 7890 | {0x3400000, 0x7fffffff, 0x1, 0x7fc00000, 0x3400080}, | ||
| 7891 | {0x3400000, 0x7fffffff, 0x76, 0x7fc00000, 0x3400080}, | ||
| 7892 | {0x3400000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3400080}, | ||
| 7893 | {0x3400000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3400080}, | ||
| 7894 | {0x3400000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3400080}, | ||
| 7895 | {0x3400000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3400000}, | ||
| 7896 | {0x3400000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3400000}, | ||
| 7897 | {0x3400000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3400000}, | ||
| 7898 | {0x3400000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3400000}, | ||
| 7899 | {0x3400000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3400000}, | ||
| 7900 | {0x3400000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3400000}, | ||
| 7901 | {0x3400000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3400000}, | ||
| 7902 | {0x3400000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3400000}, | ||
| 7903 | {0x3400000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3400000}, | ||
| 7904 | {0x3400000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7905 | {0x3400000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7906 | {0x3400000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7907 | {0x3400000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7908 | {0x3400000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7909 | {0x3400000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7910 | {0x3400000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3400000}, | ||
| 7911 | {0x3400000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3400080}, | ||
| 7912 | {0x3400000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3400080}, | ||
| 7913 | {0x3400000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3400080}, | ||
| 7914 | {0x3400000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3400080}, | ||
| 7915 | {0x3400000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3400080}, | ||
| 7916 | {0x3400000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3400000}, | ||
| 7917 | {0x3400000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3400000}, | ||
| 7918 | {0x3400000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3400000}, | ||
| 7919 | {0x3400000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3400000}, | ||
| 7920 | {0x3400000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3400000}, | ||
| 7921 | {0x3400000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3400000}, | ||
| 7922 | {0x3400000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3400000}, | ||
| 7923 | {0x3400000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3400000}, | ||
| 7924 | {0x3400000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3400000}, | ||
| 7925 | {0x3400000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7926 | {0x3400000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7927 | {0x3400000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7928 | {0x3400000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7929 | {0x3400000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7930 | {0x3400000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7931 | {0x3400000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3400000}, | ||
| 7932 | {0x3400000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3400000}, | ||
| 7933 | {0x3400000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3400000}, | ||
| 7934 | {0x3400000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3400000}, | ||
| 7935 | {0x3400000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3400000}, | ||
| 7936 | {0x3400000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3400000}, | ||
| 7937 | {0x3400000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3400000}, | ||
| 7938 | {0x3400000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3400000}, | ||
| 7939 | {0x3400000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3400000}, | ||
| 7940 | {0x3400000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3400000}, | ||
| 7941 | {0x3400000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3400000}, | ||
| 7942 | {0x3400000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, | ||
| 7943 | {0x3400000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3400000}, | ||
| 7944 | {0x3400000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3400000}, | ||
| 7945 | {0x3400000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3400000}, | ||
| 7946 | {0x3400000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3400000}, | ||
| 7947 | {0x3400000, 0x80000000, 0x0, 0x0, 0x3400000}, | ||
| 7948 | {0x3400000, 0x80000000, 0x1, 0x0, 0x3400080}, | ||
| 7949 | {0x3400000, 0x80000000, 0x76, 0x0, 0x3400080}, | ||
| 7950 | {0x3400000, 0x80000000, 0x2b94, 0x0, 0x3400080}, | ||
| 7951 | {0x3400000, 0x80000000, 0x636d24, 0x0, 0x3400080}, | ||
| 7952 | {0x3400000, 0x80000000, 0x7fffff, 0x0, 0x3400080}, | ||
| 7953 | {0x3400000, 0x80000000, 0x800000, 0x800000, 0x3400000}, | ||
| 7954 | {0x3400000, 0x80000000, 0x800002, 0x800002, 0x3400000}, | ||
| 7955 | {0x3400000, 0x80000000, 0x1398437, 0x1398437, 0x3400000}, | ||
| 7956 | {0x3400000, 0x80000000, 0xba98d27, 0xba98d27, 0x3400000}, | ||
| 7957 | {0x3400000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3400000}, | ||
| 7958 | {0x3400000, 0x80000000, 0x751f853a, 0x751f853a, 0x3400000}, | ||
| 7959 | {0x3400000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3400000}, | ||
| 7960 | {0x3400000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3400000}, | ||
| 7961 | {0x3400000, 0x80000000, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 7962 | {0x3400000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 7963 | {0x3400000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 7964 | {0x3400000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 7965 | {0x3400000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 7966 | {0x3400000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7967 | {0x3400000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 7968 | {0x3400000, 0x80000000, 0x80000000, 0x80000000, 0x3400000}, | ||
| 7969 | {0x3400000, 0x80000000, 0x80000001, 0x0, 0x3400080}, | ||
| 7970 | {0x3400000, 0x80000000, 0x80000076, 0x0, 0x3400080}, | ||
| 7971 | {0x3400000, 0x80000000, 0x80002b94, 0x0, 0x3400080}, | ||
| 7972 | {0x3400000, 0x80000000, 0x80636d24, 0x0, 0x3400080}, | ||
| 7973 | {0x3400000, 0x80000000, 0x807fffff, 0x0, 0x3400080}, | ||
| 7974 | {0x3400000, 0x80000000, 0x80800000, 0x80800000, 0x3400000}, | ||
| 7975 | {0x3400000, 0x80000000, 0x80800002, 0x80800002, 0x3400000}, | ||
| 7976 | {0x3400000, 0x80000000, 0x81398437, 0x81398437, 0x3400000}, | ||
| 7977 | {0x3400000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3400000}, | ||
| 7978 | {0x3400000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3400000}, | ||
| 7979 | {0x3400000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3400000}, | ||
| 7980 | {0x3400000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3400000}, | ||
| 7981 | {0x3400000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3400000}, | ||
| 7982 | {0x3400000, 0x80000000, 0xff800000, 0xff800000, 0x3400000}, | ||
| 7983 | {0x3400000, 0x80000000, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 7984 | {0x3400000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 7985 | {0x3400000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 7986 | {0x3400000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 7987 | {0x3400000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 7988 | {0x3400000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 7989 | {0x3400000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3400000}, | ||
| 7990 | {0x3400000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3400000}, | ||
| 7991 | {0x3400000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3400000}, | ||
| 7992 | {0x3400000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3400000}, | ||
| 7993 | {0x3400000, 0x80000000, 0x9503366, 0x9503366, 0x3400000}, | ||
| 7994 | {0x3400000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3400000}, | ||
| 7995 | {0x3400000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3400000}, | ||
| 7996 | {0x3400000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3400000}, | ||
| 7997 | {0x3400000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3400000}, | ||
| 7998 | {0x3400000, 0x80000000, 0x966320b, 0x966320b, 0x3400000}, | ||
| 7999 | {0x3400000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3400000}, | ||
| 8000 | {0x3400000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400000}, | ||
| 8001 | {0x3400000, 0x80000000, 0x317285d3, 0x317285d3, 0x3400000}, | ||
| 8002 | {0x3400000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3400000}, | ||
| 8003 | {0x3400000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3400000}, | ||
| 8004 | {0x3400000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3400000}, | ||
| 8005 | {0x3400000, 0x80000001, 0x0, 0x0, 0x3400080}, | ||
| 8006 | {0x3400000, 0x80000001, 0x1, 0x0, 0x3400080}, | ||
| 8007 | {0x3400000, 0x80000001, 0x76, 0x0, 0x3400080}, | ||
| 8008 | {0x3400000, 0x80000001, 0x2b94, 0x0, 0x3400080}, | ||
| 8009 | {0x3400000, 0x80000001, 0x636d24, 0x0, 0x3400080}, | ||
| 8010 | {0x3400000, 0x80000001, 0x7fffff, 0x0, 0x3400080}, | ||
| 8011 | {0x3400000, 0x80000001, 0x800000, 0x800000, 0x3400080}, | ||
| 8012 | {0x3400000, 0x80000001, 0x800002, 0x800002, 0x3400080}, | ||
| 8013 | {0x3400000, 0x80000001, 0x1398437, 0x1398437, 0x3400080}, | ||
| 8014 | {0x3400000, 0x80000001, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 8015 | {0x3400000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 8016 | {0x3400000, 0x80000001, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 8017 | {0x3400000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 8018 | {0x3400000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 8019 | {0x3400000, 0x80000001, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 8020 | {0x3400000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 8021 | {0x3400000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 8022 | {0x3400000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 8023 | {0x3400000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 8024 | {0x3400000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8025 | {0x3400000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 8026 | {0x3400000, 0x80000001, 0x80000000, 0x0, 0x3400080}, | ||
| 8027 | {0x3400000, 0x80000001, 0x80000001, 0x0, 0x3400080}, | ||
| 8028 | {0x3400000, 0x80000001, 0x80000076, 0x0, 0x3400080}, | ||
| 8029 | {0x3400000, 0x80000001, 0x80002b94, 0x0, 0x3400080}, | ||
| 8030 | {0x3400000, 0x80000001, 0x80636d24, 0x0, 0x3400080}, | ||
| 8031 | {0x3400000, 0x80000001, 0x807fffff, 0x0, 0x3400080}, | ||
| 8032 | {0x3400000, 0x80000001, 0x80800000, 0x80800000, 0x3400080}, | ||
| 8033 | {0x3400000, 0x80000001, 0x80800002, 0x80800002, 0x3400080}, | ||
| 8034 | {0x3400000, 0x80000001, 0x81398437, 0x81398437, 0x3400080}, | ||
| 8035 | {0x3400000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 8036 | {0x3400000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 8037 | {0x3400000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 8038 | {0x3400000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 8039 | {0x3400000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 8040 | {0x3400000, 0x80000001, 0xff800000, 0xff800000, 0x3400080}, | ||
| 8041 | {0x3400000, 0x80000001, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 8042 | {0x3400000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 8043 | {0x3400000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 8044 | {0x3400000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 8045 | {0x3400000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8046 | {0x3400000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 8047 | {0x3400000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 8048 | {0x3400000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 8049 | {0x3400000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 8050 | {0x3400000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 8051 | {0x3400000, 0x80000001, 0x9503366, 0x9503366, 0x3400080}, | ||
| 8052 | {0x3400000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 8053 | {0x3400000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 8054 | {0x3400000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 8055 | {0x3400000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 8056 | {0x3400000, 0x80000001, 0x966320b, 0x966320b, 0x3400080}, | ||
| 8057 | {0x3400000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 8058 | {0x3400000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 8059 | {0x3400000, 0x80000001, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 8060 | {0x3400000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 8061 | {0x3400000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 8062 | {0x3400000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 8063 | {0x3400000, 0x80000076, 0x0, 0x0, 0x3400080}, | ||
| 8064 | {0x3400000, 0x80000076, 0x1, 0x0, 0x3400080}, | ||
| 8065 | {0x3400000, 0x80000076, 0x76, 0x0, 0x3400080}, | ||
| 8066 | {0x3400000, 0x80000076, 0x2b94, 0x0, 0x3400080}, | ||
| 8067 | {0x3400000, 0x80000076, 0x636d24, 0x0, 0x3400080}, | ||
| 8068 | {0x3400000, 0x80000076, 0x7fffff, 0x0, 0x3400080}, | ||
| 8069 | {0x3400000, 0x80000076, 0x800000, 0x800000, 0x3400080}, | ||
| 8070 | {0x3400000, 0x80000076, 0x800002, 0x800002, 0x3400080}, | ||
| 8071 | {0x3400000, 0x80000076, 0x1398437, 0x1398437, 0x3400080}, | ||
| 8072 | {0x3400000, 0x80000076, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 8073 | {0x3400000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 8074 | {0x3400000, 0x80000076, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 8075 | {0x3400000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 8076 | {0x3400000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 8077 | {0x3400000, 0x80000076, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 8078 | {0x3400000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 8079 | {0x3400000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 8080 | {0x3400000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 8081 | {0x3400000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 8082 | {0x3400000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8083 | {0x3400000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 8084 | {0x3400000, 0x80000076, 0x80000000, 0x0, 0x3400080}, | ||
| 8085 | {0x3400000, 0x80000076, 0x80000001, 0x0, 0x3400080}, | ||
| 8086 | {0x3400000, 0x80000076, 0x80000076, 0x0, 0x3400080}, | ||
| 8087 | {0x3400000, 0x80000076, 0x80002b94, 0x0, 0x3400080}, | ||
| 8088 | {0x3400000, 0x80000076, 0x80636d24, 0x0, 0x3400080}, | ||
| 8089 | {0x3400000, 0x80000076, 0x807fffff, 0x0, 0x3400080}, | ||
| 8090 | {0x3400000, 0x80000076, 0x80800000, 0x80800000, 0x3400080}, | ||
| 8091 | {0x3400000, 0x80000076, 0x80800002, 0x80800002, 0x3400080}, | ||
| 8092 | {0x3400000, 0x80000076, 0x81398437, 0x81398437, 0x3400080}, | ||
| 8093 | {0x3400000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 8094 | {0x3400000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 8095 | {0x3400000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 8096 | {0x3400000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 8097 | {0x3400000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 8098 | {0x3400000, 0x80000076, 0xff800000, 0xff800000, 0x3400080}, | ||
| 8099 | {0x3400000, 0x80000076, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 8100 | {0x3400000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 8101 | {0x3400000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 8102 | {0x3400000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 8103 | {0x3400000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8104 | {0x3400000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 8105 | {0x3400000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 8106 | {0x3400000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 8107 | {0x3400000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 8108 | {0x3400000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 8109 | {0x3400000, 0x80000076, 0x9503366, 0x9503366, 0x3400080}, | ||
| 8110 | {0x3400000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 8111 | {0x3400000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 8112 | {0x3400000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 8113 | {0x3400000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 8114 | {0x3400000, 0x80000076, 0x966320b, 0x966320b, 0x3400080}, | ||
| 8115 | {0x3400000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 8116 | {0x3400000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 8117 | {0x3400000, 0x80000076, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 8118 | {0x3400000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 8119 | {0x3400000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 8120 | {0x3400000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 8121 | {0x3400000, 0x80002b94, 0x0, 0x0, 0x3400080}, | ||
| 8122 | {0x3400000, 0x80002b94, 0x1, 0x0, 0x3400080}, | ||
| 8123 | {0x3400000, 0x80002b94, 0x76, 0x0, 0x3400080}, | ||
| 8124 | {0x3400000, 0x80002b94, 0x2b94, 0x0, 0x3400080}, | ||
| 8125 | {0x3400000, 0x80002b94, 0x636d24, 0x0, 0x3400080}, | ||
| 8126 | {0x3400000, 0x80002b94, 0x7fffff, 0x0, 0x3400080}, | ||
| 8127 | {0x3400000, 0x80002b94, 0x800000, 0x800000, 0x3400080}, | ||
| 8128 | {0x3400000, 0x80002b94, 0x800002, 0x800002, 0x3400080}, | ||
| 8129 | {0x3400000, 0x80002b94, 0x1398437, 0x1398437, 0x3400080}, | ||
| 8130 | {0x3400000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 8131 | {0x3400000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 8132 | {0x3400000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 8133 | {0x3400000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 8134 | {0x3400000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 8135 | {0x3400000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 8136 | {0x3400000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 8137 | {0x3400000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 8138 | {0x3400000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 8139 | {0x3400000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 8140 | {0x3400000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8141 | {0x3400000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 8142 | {0x3400000, 0x80002b94, 0x80000000, 0x0, 0x3400080}, | ||
| 8143 | {0x3400000, 0x80002b94, 0x80000001, 0x0, 0x3400080}, | ||
| 8144 | {0x3400000, 0x80002b94, 0x80000076, 0x0, 0x3400080}, | ||
| 8145 | {0x3400000, 0x80002b94, 0x80002b94, 0x0, 0x3400080}, | ||
| 8146 | {0x3400000, 0x80002b94, 0x80636d24, 0x0, 0x3400080}, | ||
| 8147 | {0x3400000, 0x80002b94, 0x807fffff, 0x0, 0x3400080}, | ||
| 8148 | {0x3400000, 0x80002b94, 0x80800000, 0x80800000, 0x3400080}, | ||
| 8149 | {0x3400000, 0x80002b94, 0x80800002, 0x80800002, 0x3400080}, | ||
| 8150 | {0x3400000, 0x80002b94, 0x81398437, 0x81398437, 0x3400080}, | ||
| 8151 | {0x3400000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 8152 | {0x3400000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 8153 | {0x3400000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 8154 | {0x3400000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 8155 | {0x3400000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 8156 | {0x3400000, 0x80002b94, 0xff800000, 0xff800000, 0x3400080}, | ||
| 8157 | {0x3400000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 8158 | {0x3400000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 8159 | {0x3400000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 8160 | {0x3400000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 8161 | {0x3400000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8162 | {0x3400000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 8163 | {0x3400000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 8164 | {0x3400000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 8165 | {0x3400000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 8166 | {0x3400000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 8167 | {0x3400000, 0x80002b94, 0x9503366, 0x9503366, 0x3400080}, | ||
| 8168 | {0x3400000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 8169 | {0x3400000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 8170 | {0x3400000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 8171 | {0x3400000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 8172 | {0x3400000, 0x80002b94, 0x966320b, 0x966320b, 0x3400080}, | ||
| 8173 | {0x3400000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 8174 | {0x3400000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 8175 | {0x3400000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 8176 | {0x3400000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 8177 | {0x3400000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 8178 | {0x3400000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 8179 | {0x3400000, 0x80636d24, 0x0, 0x0, 0x3400080}, | ||
| 8180 | {0x3400000, 0x80636d24, 0x1, 0x0, 0x3400080}, | ||
| 8181 | {0x3400000, 0x80636d24, 0x76, 0x0, 0x3400080}, | ||
| 8182 | {0x3400000, 0x80636d24, 0x2b94, 0x0, 0x3400080}, | ||
| 8183 | {0x3400000, 0x80636d24, 0x636d24, 0x0, 0x3400080}, | ||
| 8184 | {0x3400000, 0x80636d24, 0x7fffff, 0x0, 0x3400080}, | ||
| 8185 | {0x3400000, 0x80636d24, 0x800000, 0x800000, 0x3400080}, | ||
| 8186 | {0x3400000, 0x80636d24, 0x800002, 0x800002, 0x3400080}, | ||
| 8187 | {0x3400000, 0x80636d24, 0x1398437, 0x1398437, 0x3400080}, | ||
| 8188 | {0x3400000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 8189 | {0x3400000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 8190 | {0x3400000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 8191 | {0x3400000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 8192 | {0x3400000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 8193 | {0x3400000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 8194 | {0x3400000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 8195 | {0x3400000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 8196 | {0x3400000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 8197 | {0x3400000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 8198 | {0x3400000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8199 | {0x3400000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 8200 | {0x3400000, 0x80636d24, 0x80000000, 0x0, 0x3400080}, | ||
| 8201 | {0x3400000, 0x80636d24, 0x80000001, 0x0, 0x3400080}, | ||
| 8202 | {0x3400000, 0x80636d24, 0x80000076, 0x0, 0x3400080}, | ||
| 8203 | {0x3400000, 0x80636d24, 0x80002b94, 0x0, 0x3400080}, | ||
| 8204 | {0x3400000, 0x80636d24, 0x80636d24, 0x0, 0x3400080}, | ||
| 8205 | {0x3400000, 0x80636d24, 0x807fffff, 0x0, 0x3400080}, | ||
| 8206 | {0x3400000, 0x80636d24, 0x80800000, 0x80800000, 0x3400080}, | ||
| 8207 | {0x3400000, 0x80636d24, 0x80800002, 0x80800002, 0x3400080}, | ||
| 8208 | {0x3400000, 0x80636d24, 0x81398437, 0x81398437, 0x3400080}, | ||
| 8209 | {0x3400000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 8210 | {0x3400000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 8211 | {0x3400000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 8212 | {0x3400000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 8213 | {0x3400000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 8214 | {0x3400000, 0x80636d24, 0xff800000, 0xff800000, 0x3400080}, | ||
| 8215 | {0x3400000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 8216 | {0x3400000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 8217 | {0x3400000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 8218 | {0x3400000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 8219 | {0x3400000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8220 | {0x3400000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 8221 | {0x3400000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 8222 | {0x3400000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 8223 | {0x3400000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 8224 | {0x3400000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 8225 | {0x3400000, 0x80636d24, 0x9503366, 0x9503366, 0x3400080}, | ||
| 8226 | {0x3400000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 8227 | {0x3400000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 8228 | {0x3400000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 8229 | {0x3400000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 8230 | {0x3400000, 0x80636d24, 0x966320b, 0x966320b, 0x3400080}, | ||
| 8231 | {0x3400000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 8232 | {0x3400000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 8233 | {0x3400000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 8234 | {0x3400000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 8235 | {0x3400000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 8236 | {0x3400000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 8237 | {0x3400000, 0x807fffff, 0x0, 0x0, 0x3400080}, | ||
| 8238 | {0x3400000, 0x807fffff, 0x1, 0x0, 0x3400080}, | ||
| 8239 | {0x3400000, 0x807fffff, 0x76, 0x0, 0x3400080}, | ||
| 8240 | {0x3400000, 0x807fffff, 0x2b94, 0x0, 0x3400080}, | ||
| 8241 | {0x3400000, 0x807fffff, 0x636d24, 0x0, 0x3400080}, | ||
| 8242 | {0x3400000, 0x807fffff, 0x7fffff, 0x0, 0x3400080}, | ||
| 8243 | {0x3400000, 0x807fffff, 0x800000, 0x800000, 0x3400080}, | ||
| 8244 | {0x3400000, 0x807fffff, 0x800002, 0x800002, 0x3400080}, | ||
| 8245 | {0x3400000, 0x807fffff, 0x1398437, 0x1398437, 0x3400080}, | ||
| 8246 | {0x3400000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3400080}, | ||
| 8247 | {0x3400000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3400080}, | ||
| 8248 | {0x3400000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3400080}, | ||
| 8249 | {0x3400000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, | ||
| 8250 | {0x3400000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3400080}, | ||
| 8251 | {0x3400000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3400080}, | ||
| 8252 | {0x3400000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3400081}, | ||
| 8253 | {0x3400000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3400081}, | ||
| 8254 | {0x3400000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3400081}, | ||
| 8255 | {0x3400000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3400080}, | ||
| 8256 | {0x3400000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8257 | {0x3400000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3400080}, | ||
| 8258 | {0x3400000, 0x807fffff, 0x80000000, 0x0, 0x3400080}, | ||
| 8259 | {0x3400000, 0x807fffff, 0x80000001, 0x0, 0x3400080}, | ||
| 8260 | {0x3400000, 0x807fffff, 0x80000076, 0x0, 0x3400080}, | ||
| 8261 | {0x3400000, 0x807fffff, 0x80002b94, 0x0, 0x3400080}, | ||
| 8262 | {0x3400000, 0x807fffff, 0x80636d24, 0x0, 0x3400080}, | ||
| 8263 | {0x3400000, 0x807fffff, 0x807fffff, 0x0, 0x3400080}, | ||
| 8264 | {0x3400000, 0x807fffff, 0x80800000, 0x80800000, 0x3400080}, | ||
| 8265 | {0x3400000, 0x807fffff, 0x80800002, 0x80800002, 0x3400080}, | ||
| 8266 | {0x3400000, 0x807fffff, 0x81398437, 0x81398437, 0x3400080}, | ||
| 8267 | {0x3400000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3400080}, | ||
| 8268 | {0x3400000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, | ||
| 8269 | {0x3400000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3400080}, | ||
| 8270 | {0x3400000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3400080}, | ||
| 8271 | {0x3400000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3400080}, | ||
| 8272 | {0x3400000, 0x807fffff, 0xff800000, 0xff800000, 0x3400080}, | ||
| 8273 | {0x3400000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3400081}, | ||
| 8274 | {0x3400000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3400081}, | ||
| 8275 | {0x3400000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3400081}, | ||
| 8276 | {0x3400000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3400080}, | ||
| 8277 | {0x3400000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3400080}, | ||
| 8278 | {0x3400000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3400080}, | ||
| 8279 | {0x3400000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3400080}, | ||
| 8280 | {0x3400000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3400080}, | ||
| 8281 | {0x3400000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3400080}, | ||
| 8282 | {0x3400000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3400080}, | ||
| 8283 | {0x3400000, 0x807fffff, 0x9503366, 0x9503366, 0x3400080}, | ||
| 8284 | {0x3400000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, | ||
| 8285 | {0x3400000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, | ||
| 8286 | {0x3400000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3400080}, | ||
| 8287 | {0x3400000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, | ||
| 8288 | {0x3400000, 0x807fffff, 0x966320b, 0x966320b, 0x3400080}, | ||
| 8289 | {0x3400000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3400080}, | ||
| 8290 | {0x3400000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, | ||
| 8291 | {0x3400000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3400080}, | ||
| 8292 | {0x3400000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3400080}, | ||
| 8293 | {0x3400000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, | ||
| 8294 | {0x3400000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3400080}, | ||
| 8295 | {0x3400000, 0x80800000, 0x0, 0x80800000, 0x3400000}, | ||
| 8296 | {0x3400000, 0x80800000, 0x1, 0x80800000, 0x3400080}, | ||
| 8297 | {0x3400000, 0x80800000, 0x76, 0x80800000, 0x3400080}, | ||
| 8298 | {0x3400000, 0x80800000, 0x2b94, 0x80800000, 0x3400080}, | ||
| 8299 | {0x3400000, 0x80800000, 0x636d24, 0x80800000, 0x3400080}, | ||
| 8300 | {0x3400000, 0x80800000, 0x7fffff, 0x80800000, 0x3400080}, | ||
| 8301 | {0x3400000, 0x80800000, 0x800000, 0x0, 0x3400000}, | ||
| 8302 | {0x3400000, 0x80800000, 0x800002, 0x0, 0x3400008}, | ||
| 8303 | {0x3400000, 0x80800000, 0x1398437, 0xf3086e, 0x3400000}, | ||
| 8304 | {0x3400000, 0x80800000, 0xba98d27, 0xba98d25, 0x3400000}, | ||
| 8305 | {0x3400000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3400000}, | ||
| 8306 | {0x3400000, 0x80800000, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 8307 | {0x3400000, 0x80800000, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 8308 | {0x3400000, 0x80800000, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 8309 | {0x3400000, 0x80800000, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 8310 | {0x3400000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8311 | {0x3400000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8312 | {0x3400000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8313 | {0x3400000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8314 | {0x3400000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8315 | {0x3400000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8316 | {0x3400000, 0x80800000, 0x80000000, 0x80800000, 0x3400000}, | ||
| 8317 | {0x3400000, 0x80800000, 0x80000001, 0x80800000, 0x3400080}, | ||
| 8318 | {0x3400000, 0x80800000, 0x80000076, 0x80800000, 0x3400080}, | ||
| 8319 | {0x3400000, 0x80800000, 0x80002b94, 0x80800000, 0x3400080}, | ||
| 8320 | {0x3400000, 0x80800000, 0x80636d24, 0x80800000, 0x3400080}, | ||
| 8321 | {0x3400000, 0x80800000, 0x807fffff, 0x80800000, 0x3400080}, | ||
| 8322 | {0x3400000, 0x80800000, 0x80800000, 0x81000000, 0x3400000}, | ||
| 8323 | {0x3400000, 0x80800000, 0x80800002, 0x81000001, 0x3400000}, | ||
| 8324 | {0x3400000, 0x80800000, 0x81398437, 0x81798437, 0x3400000}, | ||
| 8325 | {0x3400000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3400000}, | ||
| 8326 | {0x3400000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3400000}, | ||
| 8327 | {0x3400000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 8328 | {0x3400000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 8329 | {0x3400000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 8330 | {0x3400000, 0x80800000, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8331 | {0x3400000, 0x80800000, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8332 | {0x3400000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8333 | {0x3400000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8334 | {0x3400000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8335 | {0x3400000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8336 | {0x3400000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8337 | {0x3400000, 0x80800000, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 8338 | {0x3400000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 8339 | {0x3400000, 0x80800000, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 8340 | {0x3400000, 0x80800000, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 8341 | {0x3400000, 0x80800000, 0x9503366, 0x9503326, 0x3400000}, | ||
| 8342 | {0x3400000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, | ||
| 8343 | {0x3400000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 8344 | {0x3400000, 0x80800000, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 8345 | {0x3400000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, | ||
| 8346 | {0x3400000, 0x80800000, 0x966320b, 0x96631cb, 0x3400000}, | ||
| 8347 | {0x3400000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3400010}, | ||
| 8348 | {0x3400000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, | ||
| 8349 | {0x3400000, 0x80800000, 0x317285d3, 0x317285d3, 0x3400010}, | ||
| 8350 | {0x3400000, 0x80800000, 0x3c9623b1, 0x3c9623b1, 0x3400010}, | ||
| 8351 | {0x3400000, 0x80800000, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 8352 | {0x3400000, 0x80800000, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 8353 | {0x3400000, 0x80800002, 0x0, 0x80800002, 0x3400000}, | ||
| 8354 | {0x3400000, 0x80800002, 0x1, 0x80800002, 0x3400080}, | ||
| 8355 | {0x3400000, 0x80800002, 0x76, 0x80800002, 0x3400080}, | ||
| 8356 | {0x3400000, 0x80800002, 0x2b94, 0x80800002, 0x3400080}, | ||
| 8357 | {0x3400000, 0x80800002, 0x636d24, 0x80800002, 0x3400080}, | ||
| 8358 | {0x3400000, 0x80800002, 0x7fffff, 0x80800002, 0x3400080}, | ||
| 8359 | {0x3400000, 0x80800002, 0x800000, 0x0, 0x3400008}, | ||
| 8360 | {0x3400000, 0x80800002, 0x800002, 0x0, 0x3400000}, | ||
| 8361 | {0x3400000, 0x80800002, 0x1398437, 0xf3086c, 0x3400000}, | ||
| 8362 | {0x3400000, 0x80800002, 0xba98d27, 0xba98d25, 0x3400010}, | ||
| 8363 | {0x3400000, 0x80800002, 0xba98d7a, 0xba98d78, 0x3400010}, | ||
| 8364 | {0x3400000, 0x80800002, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 8365 | {0x3400000, 0x80800002, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 8366 | {0x3400000, 0x80800002, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 8367 | {0x3400000, 0x80800002, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 8368 | {0x3400000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8369 | {0x3400000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8370 | {0x3400000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8371 | {0x3400000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8372 | {0x3400000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8373 | {0x3400000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8374 | {0x3400000, 0x80800002, 0x80000000, 0x80800002, 0x3400000}, | ||
| 8375 | {0x3400000, 0x80800002, 0x80000001, 0x80800002, 0x3400080}, | ||
| 8376 | {0x3400000, 0x80800002, 0x80000076, 0x80800002, 0x3400080}, | ||
| 8377 | {0x3400000, 0x80800002, 0x80002b94, 0x80800002, 0x3400080}, | ||
| 8378 | {0x3400000, 0x80800002, 0x80636d24, 0x80800002, 0x3400080}, | ||
| 8379 | {0x3400000, 0x80800002, 0x807fffff, 0x80800002, 0x3400080}, | ||
| 8380 | {0x3400000, 0x80800002, 0x80800000, 0x81000001, 0x3400000}, | ||
| 8381 | {0x3400000, 0x80800002, 0x80800002, 0x81000002, 0x3400000}, | ||
| 8382 | {0x3400000, 0x80800002, 0x81398437, 0x81798438, 0x3400000}, | ||
| 8383 | {0x3400000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3400010}, | ||
| 8384 | {0x3400000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3400010}, | ||
| 8385 | {0x3400000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 8386 | {0x3400000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 8387 | {0x3400000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 8388 | {0x3400000, 0x80800002, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8389 | {0x3400000, 0x80800002, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8390 | {0x3400000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8391 | {0x3400000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8392 | {0x3400000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8393 | {0x3400000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8394 | {0x3400000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8395 | {0x3400000, 0x80800002, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 8396 | {0x3400000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 8397 | {0x3400000, 0x80800002, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 8398 | {0x3400000, 0x80800002, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 8399 | {0x3400000, 0x80800002, 0x9503366, 0x9503326, 0x3400010}, | ||
| 8400 | {0x3400000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, | ||
| 8401 | {0x3400000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 8402 | {0x3400000, 0x80800002, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 8403 | {0x3400000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, | ||
| 8404 | {0x3400000, 0x80800002, 0x966320b, 0x96631cb, 0x3400010}, | ||
| 8405 | {0x3400000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3400010}, | ||
| 8406 | {0x3400000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, | ||
| 8407 | {0x3400000, 0x80800002, 0x317285d3, 0x317285d3, 0x3400010}, | ||
| 8408 | {0x3400000, 0x80800002, 0x3c9623b1, 0x3c9623b1, 0x3400010}, | ||
| 8409 | {0x3400000, 0x80800002, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 8410 | {0x3400000, 0x80800002, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 8411 | {0x3400000, 0x81398437, 0x0, 0x81398437, 0x3400000}, | ||
| 8412 | {0x3400000, 0x81398437, 0x1, 0x81398437, 0x3400080}, | ||
| 8413 | {0x3400000, 0x81398437, 0x76, 0x81398437, 0x3400080}, | ||
| 8414 | {0x3400000, 0x81398437, 0x2b94, 0x81398437, 0x3400080}, | ||
| 8415 | {0x3400000, 0x81398437, 0x636d24, 0x81398437, 0x3400080}, | ||
| 8416 | {0x3400000, 0x81398437, 0x7fffff, 0x81398437, 0x3400080}, | ||
| 8417 | {0x3400000, 0x81398437, 0x800000, 0x80f3086e, 0x3400000}, | ||
| 8418 | {0x3400000, 0x81398437, 0x800002, 0x80f3086c, 0x3400000}, | ||
| 8419 | {0x3400000, 0x81398437, 0x1398437, 0x0, 0x3400000}, | ||
| 8420 | {0x3400000, 0x81398437, 0xba98d27, 0xba98d22, 0x3400010}, | ||
| 8421 | {0x3400000, 0x81398437, 0xba98d7a, 0xba98d75, 0x3400010}, | ||
| 8422 | {0x3400000, 0x81398437, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 8423 | {0x3400000, 0x81398437, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 8424 | {0x3400000, 0x81398437, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 8425 | {0x3400000, 0x81398437, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 8426 | {0x3400000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8427 | {0x3400000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8428 | {0x3400000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8429 | {0x3400000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8430 | {0x3400000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8431 | {0x3400000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8432 | {0x3400000, 0x81398437, 0x80000000, 0x81398437, 0x3400000}, | ||
| 8433 | {0x3400000, 0x81398437, 0x80000001, 0x81398437, 0x3400080}, | ||
| 8434 | {0x3400000, 0x81398437, 0x80000076, 0x81398437, 0x3400080}, | ||
| 8435 | {0x3400000, 0x81398437, 0x80002b94, 0x81398437, 0x3400080}, | ||
| 8436 | {0x3400000, 0x81398437, 0x80636d24, 0x81398437, 0x3400080}, | ||
| 8437 | {0x3400000, 0x81398437, 0x807fffff, 0x81398437, 0x3400080}, | ||
| 8438 | {0x3400000, 0x81398437, 0x80800000, 0x81798437, 0x3400000}, | ||
| 8439 | {0x3400000, 0x81398437, 0x80800002, 0x81798438, 0x3400000}, | ||
| 8440 | {0x3400000, 0x81398437, 0x81398437, 0x81b98437, 0x3400000}, | ||
| 8441 | {0x3400000, 0x81398437, 0x8ba98d27, 0x8ba98d2c, 0x3400010}, | ||
| 8442 | {0x3400000, 0x81398437, 0x8ba98d7a, 0x8ba98d7f, 0x3400010}, | ||
| 8443 | {0x3400000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 8444 | {0x3400000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 8445 | {0x3400000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 8446 | {0x3400000, 0x81398437, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8447 | {0x3400000, 0x81398437, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8448 | {0x3400000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8449 | {0x3400000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8450 | {0x3400000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8451 | {0x3400000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8452 | {0x3400000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8453 | {0x3400000, 0x81398437, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 8454 | {0x3400000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 8455 | {0x3400000, 0x81398437, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 8456 | {0x3400000, 0x81398437, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 8457 | {0x3400000, 0x81398437, 0x9503366, 0x95032ad, 0x3400010}, | ||
| 8458 | {0x3400000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, | ||
| 8459 | {0x3400000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 8460 | {0x3400000, 0x81398437, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 8461 | {0x3400000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, | ||
| 8462 | {0x3400000, 0x81398437, 0x966320b, 0x9663152, 0x3400010}, | ||
| 8463 | {0x3400000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3400010}, | ||
| 8464 | {0x3400000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, | ||
| 8465 | {0x3400000, 0x81398437, 0x317285d3, 0x317285d3, 0x3400010}, | ||
| 8466 | {0x3400000, 0x81398437, 0x3c9623b1, 0x3c9623b1, 0x3400010}, | ||
| 8467 | {0x3400000, 0x81398437, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 8468 | {0x3400000, 0x81398437, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 8469 | {0x3400000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3400000}, | ||
| 8470 | {0x3400000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3400080}, | ||
| 8471 | {0x3400000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3400080}, | ||
| 8472 | {0x3400000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3400080}, | ||
| 8473 | {0x3400000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3400080}, | ||
| 8474 | {0x3400000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3400080}, | ||
| 8475 | {0x3400000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3400000}, | ||
| 8476 | {0x3400000, 0x8ba98d27, 0x800002, 0x8ba98d24, 0x3400010}, | ||
| 8477 | {0x3400000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3400010}, | ||
| 8478 | {0x3400000, 0x8ba98d27, 0xba98d27, 0x0, 0x3400000}, | ||
| 8479 | {0x3400000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3400000}, | ||
| 8480 | {0x3400000, 0x8ba98d27, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 8481 | {0x3400000, 0x8ba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 8482 | {0x3400000, 0x8ba98d27, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 8483 | {0x3400000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 8484 | {0x3400000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8485 | {0x3400000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8486 | {0x3400000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8487 | {0x3400000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8488 | {0x3400000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8489 | {0x3400000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8490 | {0x3400000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3400000}, | ||
| 8491 | {0x3400000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3400080}, | ||
| 8492 | {0x3400000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3400080}, | ||
| 8493 | {0x3400000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3400080}, | ||
| 8494 | {0x3400000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3400080}, | ||
| 8495 | {0x3400000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3400080}, | ||
| 8496 | {0x3400000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3400000}, | ||
| 8497 | {0x3400000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3400010}, | ||
| 8498 | {0x3400000, 0x8ba98d27, 0x81398437, 0x8ba98d2c, 0x3400010}, | ||
| 8499 | {0x3400000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3400000}, | ||
| 8500 | {0x3400000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3400010}, | ||
| 8501 | {0x3400000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 8502 | {0x3400000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 8503 | {0x3400000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 8504 | {0x3400000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8505 | {0x3400000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8506 | {0x3400000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8507 | {0x3400000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8508 | {0x3400000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8509 | {0x3400000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8510 | {0x3400000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8511 | {0x3400000, 0x8ba98d27, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 8512 | {0x3400000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 8513 | {0x3400000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 8514 | {0x3400000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 8515 | {0x3400000, 0x8ba98d27, 0x9503366, 0x8ba30b8b, 0x3400010}, | ||
| 8516 | {0x3400000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, | ||
| 8517 | {0x3400000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 8518 | {0x3400000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 8519 | {0x3400000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, | ||
| 8520 | {0x3400000, 0x8ba98d27, 0x966320b, 0x8ba25b96, 0x3400010}, | ||
| 8521 | {0x3400000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3400010}, | ||
| 8522 | {0x3400000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, | ||
| 8523 | {0x3400000, 0x8ba98d27, 0x317285d3, 0x317285d3, 0x3400010}, | ||
| 8524 | {0x3400000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b1, 0x3400010}, | ||
| 8525 | {0x3400000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 8526 | {0x3400000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 8527 | {0x3400000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3400000}, | ||
| 8528 | {0x3400000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3400080}, | ||
| 8529 | {0x3400000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3400080}, | ||
| 8530 | {0x3400000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3400080}, | ||
| 8531 | {0x3400000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3400080}, | ||
| 8532 | {0x3400000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3400080}, | ||
| 8533 | {0x3400000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3400000}, | ||
| 8534 | {0x3400000, 0x8ba98d7a, 0x800002, 0x8ba98d77, 0x3400010}, | ||
| 8535 | {0x3400000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3400010}, | ||
| 8536 | {0x3400000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3400000}, | ||
| 8537 | {0x3400000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3400000}, | ||
| 8538 | {0x3400000, 0x8ba98d7a, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 8539 | {0x3400000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 8540 | {0x3400000, 0x8ba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 8541 | {0x3400000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 8542 | {0x3400000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8543 | {0x3400000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8544 | {0x3400000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8545 | {0x3400000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8546 | {0x3400000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8547 | {0x3400000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8548 | {0x3400000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3400000}, | ||
| 8549 | {0x3400000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3400080}, | ||
| 8550 | {0x3400000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3400080}, | ||
| 8551 | {0x3400000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3400080}, | ||
| 8552 | {0x3400000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3400080}, | ||
| 8553 | {0x3400000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3400080}, | ||
| 8554 | {0x3400000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3400000}, | ||
| 8555 | {0x3400000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3400010}, | ||
| 8556 | {0x3400000, 0x8ba98d7a, 0x81398437, 0x8ba98d7f, 0x3400010}, | ||
| 8557 | {0x3400000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3400010}, | ||
| 8558 | {0x3400000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3400000}, | ||
| 8559 | {0x3400000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 8560 | {0x3400000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 8561 | {0x3400000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 8562 | {0x3400000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8563 | {0x3400000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8564 | {0x3400000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8565 | {0x3400000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8566 | {0x3400000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8567 | {0x3400000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8568 | {0x3400000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8569 | {0x3400000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 8570 | {0x3400000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 8571 | {0x3400000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 8572 | {0x3400000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 8573 | {0x3400000, 0x8ba98d7a, 0x9503366, 0x8ba30bde, 0x3400010}, | ||
| 8574 | {0x3400000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, | ||
| 8575 | {0x3400000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 8576 | {0x3400000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 8577 | {0x3400000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, | ||
| 8578 | {0x3400000, 0x8ba98d7a, 0x966320b, 0x8ba25be9, 0x3400010}, | ||
| 8579 | {0x3400000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3400010}, | ||
| 8580 | {0x3400000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, | ||
| 8581 | {0x3400000, 0x8ba98d7a, 0x317285d3, 0x317285d3, 0x3400010}, | ||
| 8582 | {0x3400000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3400010}, | ||
| 8583 | {0x3400000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 8584 | {0x3400000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 8585 | {0x3400000, 0xf51f853a, 0x0, 0xf51f853a, 0x3400000}, | ||
| 8586 | {0x3400000, 0xf51f853a, 0x1, 0xf51f853a, 0x3400080}, | ||
| 8587 | {0x3400000, 0xf51f853a, 0x76, 0xf51f853a, 0x3400080}, | ||
| 8588 | {0x3400000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3400080}, | ||
| 8589 | {0x3400000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3400080}, | ||
| 8590 | {0x3400000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3400080}, | ||
| 8591 | {0x3400000, 0xf51f853a, 0x800000, 0xf51f8539, 0x3400010}, | ||
| 8592 | {0x3400000, 0xf51f853a, 0x800002, 0xf51f8539, 0x3400010}, | ||
| 8593 | {0x3400000, 0xf51f853a, 0x1398437, 0xf51f8539, 0x3400010}, | ||
| 8594 | {0x3400000, 0xf51f853a, 0xba98d27, 0xf51f8539, 0x3400010}, | ||
| 8595 | {0x3400000, 0xf51f853a, 0xba98d7a, 0xf51f8539, 0x3400010}, | ||
| 8596 | {0x3400000, 0xf51f853a, 0x751f853a, 0x0, 0x3400000}, | ||
| 8597 | {0x3400000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe7, 0x3400010}, | ||
| 8598 | {0x3400000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff6, 0x3400010}, | ||
| 8599 | {0x3400000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 8600 | {0x3400000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8601 | {0x3400000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8602 | {0x3400000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8603 | {0x3400000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8604 | {0x3400000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8605 | {0x3400000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8606 | {0x3400000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3400000}, | ||
| 8607 | {0x3400000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3400080}, | ||
| 8608 | {0x3400000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3400080}, | ||
| 8609 | {0x3400000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3400080}, | ||
| 8610 | {0x3400000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3400080}, | ||
| 8611 | {0x3400000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3400080}, | ||
| 8612 | {0x3400000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3400010}, | ||
| 8613 | {0x3400000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3400010}, | ||
| 8614 | {0x3400000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3400010}, | ||
| 8615 | {0x3400000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3400010}, | ||
| 8616 | {0x3400000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3400010}, | ||
| 8617 | {0x3400000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3400000}, | ||
| 8618 | {0x3400000, 0xf51f853a, 0xff7ffff0, 0xff7ffff9, 0x3400010}, | ||
| 8619 | {0x3400000, 0xf51f853a, 0xff7fffff, 0xff7fffff, 0x3400014}, | ||
| 8620 | {0x3400000, 0xf51f853a, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8621 | {0x3400000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8622 | {0x3400000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8623 | {0x3400000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8624 | {0x3400000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8625 | {0x3400000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8626 | {0x3400000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8627 | {0x3400000, 0xf51f853a, 0x4f3495cb, 0xf51f8539, 0x3400010}, | ||
| 8628 | {0x3400000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3400010}, | ||
| 8629 | {0x3400000, 0xf51f853a, 0x7c994e9e, 0x7c994d5f, 0x3400010}, | ||
| 8630 | {0x3400000, 0xf51f853a, 0x6164bd6c, 0xf51f8539, 0x3400010}, | ||
| 8631 | {0x3400000, 0xf51f853a, 0x9503366, 0xf51f8539, 0x3400010}, | ||
| 8632 | {0x3400000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3400010}, | ||
| 8633 | {0x3400000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3400010}, | ||
| 8634 | {0x3400000, 0xf51f853a, 0x77f31e2f, 0x77ee2206, 0x3400010}, | ||
| 8635 | {0x3400000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3400010}, | ||
| 8636 | {0x3400000, 0xf51f853a, 0x966320b, 0xf51f8539, 0x3400010}, | ||
| 8637 | {0x3400000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3400010}, | ||
| 8638 | {0x3400000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3400010}, | ||
| 8639 | {0x3400000, 0xf51f853a, 0x317285d3, 0xf51f8539, 0x3400010}, | ||
| 8640 | {0x3400000, 0xf51f853a, 0x3c9623b1, 0xf51f8539, 0x3400010}, | ||
| 8641 | {0x3400000, 0xf51f853a, 0x51fd2c7c, 0xf51f8539, 0x3400010}, | ||
| 8642 | {0x3400000, 0xf51f853a, 0x7b906a6c, 0x7b906570, 0x3400010}, | ||
| 8643 | {0x3400000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3400000}, | ||
| 8644 | {0x3400000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3400080}, | ||
| 8645 | {0x3400000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3400080}, | ||
| 8646 | {0x3400000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3400080}, | ||
| 8647 | {0x3400000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3400080}, | ||
| 8648 | {0x3400000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3400080}, | ||
| 8649 | {0x3400000, 0xff7ffff0, 0x800000, 0xff7fffef, 0x3400010}, | ||
| 8650 | {0x3400000, 0xff7ffff0, 0x800002, 0xff7fffef, 0x3400010}, | ||
| 8651 | {0x3400000, 0xff7ffff0, 0x1398437, 0xff7fffef, 0x3400010}, | ||
| 8652 | {0x3400000, 0xff7ffff0, 0xba98d27, 0xff7fffef, 0x3400010}, | ||
| 8653 | {0x3400000, 0xff7ffff0, 0xba98d7a, 0xff7fffef, 0x3400010}, | ||
| 8654 | {0x3400000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3400010}, | ||
| 8655 | {0x3400000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3400000}, | ||
| 8656 | {0x3400000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3400000}, | ||
| 8657 | {0x3400000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 8658 | {0x3400000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8659 | {0x3400000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8660 | {0x3400000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8661 | {0x3400000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8662 | {0x3400000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8663 | {0x3400000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8664 | {0x3400000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3400000}, | ||
| 8665 | {0x3400000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3400080}, | ||
| 8666 | {0x3400000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3400080}, | ||
| 8667 | {0x3400000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3400080}, | ||
| 8668 | {0x3400000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3400080}, | ||
| 8669 | {0x3400000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3400080}, | ||
| 8670 | {0x3400000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3400010}, | ||
| 8671 | {0x3400000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3400010}, | ||
| 8672 | {0x3400000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3400010}, | ||
| 8673 | {0x3400000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3400010}, | ||
| 8674 | {0x3400000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3400010}, | ||
| 8675 | {0x3400000, 0xff7ffff0, 0xf51f853a, 0xff7ffff9, 0x3400010}, | ||
| 8676 | {0x3400000, 0xff7ffff0, 0xff7ffff0, 0xff7fffff, 0x3400014}, | ||
| 8677 | {0x3400000, 0xff7ffff0, 0xff7fffff, 0xff7fffff, 0x3400014}, | ||
| 8678 | {0x3400000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8679 | {0x3400000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8680 | {0x3400000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8681 | {0x3400000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8682 | {0x3400000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8683 | {0x3400000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8684 | {0x3400000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8685 | {0x3400000, 0xff7ffff0, 0x4f3495cb, 0xff7fffef, 0x3400010}, | ||
| 8686 | {0x3400000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3400010}, | ||
| 8687 | {0x3400000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3400010}, | ||
| 8688 | {0x3400000, 0xff7ffff0, 0x6164bd6c, 0xff7fffef, 0x3400010}, | ||
| 8689 | {0x3400000, 0xff7ffff0, 0x9503366, 0xff7fffef, 0x3400010}, | ||
| 8690 | {0x3400000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3400010}, | ||
| 8691 | {0x3400000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3400010}, | ||
| 8692 | {0x3400000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe09, 0x3400010}, | ||
| 8693 | {0x3400000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3400010}, | ||
| 8694 | {0x3400000, 0xff7ffff0, 0x966320b, 0xff7fffef, 0x3400010}, | ||
| 8695 | {0x3400000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3400010}, | ||
| 8696 | {0x3400000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3400010}, | ||
| 8697 | {0x3400000, 0xff7ffff0, 0x317285d3, 0xff7fffef, 0x3400010}, | ||
| 8698 | {0x3400000, 0xff7ffff0, 0x3c9623b1, 0xff7fffef, 0x3400010}, | ||
| 8699 | {0x3400000, 0xff7ffff0, 0x51fd2c7c, 0xff7fffef, 0x3400010}, | ||
| 8700 | {0x3400000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3400010}, | ||
| 8701 | {0x3400000, 0xff7fffff, 0x0, 0xff7fffff, 0x3400000}, | ||
| 8702 | {0x3400000, 0xff7fffff, 0x1, 0xff7fffff, 0x3400080}, | ||
| 8703 | {0x3400000, 0xff7fffff, 0x76, 0xff7fffff, 0x3400080}, | ||
| 8704 | {0x3400000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3400080}, | ||
| 8705 | {0x3400000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3400080}, | ||
| 8706 | {0x3400000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3400080}, | ||
| 8707 | {0x3400000, 0xff7fffff, 0x800000, 0xff7ffffe, 0x3400010}, | ||
| 8708 | {0x3400000, 0xff7fffff, 0x800002, 0xff7ffffe, 0x3400010}, | ||
| 8709 | {0x3400000, 0xff7fffff, 0x1398437, 0xff7ffffe, 0x3400010}, | ||
| 8710 | {0x3400000, 0xff7fffff, 0xba98d27, 0xff7ffffe, 0x3400010}, | ||
| 8711 | {0x3400000, 0xff7fffff, 0xba98d7a, 0xff7ffffe, 0x3400010}, | ||
| 8712 | {0x3400000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3400010}, | ||
| 8713 | {0x3400000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3400000}, | ||
| 8714 | {0x3400000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3400000}, | ||
| 8715 | {0x3400000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 8716 | {0x3400000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8717 | {0x3400000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8718 | {0x3400000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8719 | {0x3400000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8720 | {0x3400000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8721 | {0x3400000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8722 | {0x3400000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3400000}, | ||
| 8723 | {0x3400000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3400080}, | ||
| 8724 | {0x3400000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3400080}, | ||
| 8725 | {0x3400000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3400080}, | ||
| 8726 | {0x3400000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3400080}, | ||
| 8727 | {0x3400000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3400080}, | ||
| 8728 | {0x3400000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3400010}, | ||
| 8729 | {0x3400000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3400010}, | ||
| 8730 | {0x3400000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3400010}, | ||
| 8731 | {0x3400000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3400010}, | ||
| 8732 | {0x3400000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3400010}, | ||
| 8733 | {0x3400000, 0xff7fffff, 0xf51f853a, 0xff7fffff, 0x3400014}, | ||
| 8734 | {0x3400000, 0xff7fffff, 0xff7ffff0, 0xff7fffff, 0x3400014}, | ||
| 8735 | {0x3400000, 0xff7fffff, 0xff7fffff, 0xff7fffff, 0x3400014}, | ||
| 8736 | {0x3400000, 0xff7fffff, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8737 | {0x3400000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8738 | {0x3400000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8739 | {0x3400000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8740 | {0x3400000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8741 | {0x3400000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8742 | {0x3400000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8743 | {0x3400000, 0xff7fffff, 0x4f3495cb, 0xff7ffffe, 0x3400010}, | ||
| 8744 | {0x3400000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3400010}, | ||
| 8745 | {0x3400000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3400010}, | ||
| 8746 | {0x3400000, 0xff7fffff, 0x6164bd6c, 0xff7ffffe, 0x3400010}, | ||
| 8747 | {0x3400000, 0xff7fffff, 0x9503366, 0xff7ffffe, 0x3400010}, | ||
| 8748 | {0x3400000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3400010}, | ||
| 8749 | {0x3400000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3400010}, | ||
| 8750 | {0x3400000, 0xff7fffff, 0x77f31e2f, 0xff7ffe18, 0x3400010}, | ||
| 8751 | {0x3400000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3400010}, | ||
| 8752 | {0x3400000, 0xff7fffff, 0x966320b, 0xff7ffffe, 0x3400010}, | ||
| 8753 | {0x3400000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3400010}, | ||
| 8754 | {0x3400000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3400010}, | ||
| 8755 | {0x3400000, 0xff7fffff, 0x317285d3, 0xff7ffffe, 0x3400010}, | ||
| 8756 | {0x3400000, 0xff7fffff, 0x3c9623b1, 0xff7ffffe, 0x3400010}, | ||
| 8757 | {0x3400000, 0xff7fffff, 0x51fd2c7c, 0xff7ffffe, 0x3400010}, | ||
| 8758 | {0x3400000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3400010}, | ||
| 8759 | {0x3400000, 0xff800000, 0x0, 0xff800000, 0x3400000}, | ||
| 8760 | {0x3400000, 0xff800000, 0x1, 0xff800000, 0x3400080}, | ||
| 8761 | {0x3400000, 0xff800000, 0x76, 0xff800000, 0x3400080}, | ||
| 8762 | {0x3400000, 0xff800000, 0x2b94, 0xff800000, 0x3400080}, | ||
| 8763 | {0x3400000, 0xff800000, 0x636d24, 0xff800000, 0x3400080}, | ||
| 8764 | {0x3400000, 0xff800000, 0x7fffff, 0xff800000, 0x3400080}, | ||
| 8765 | {0x3400000, 0xff800000, 0x800000, 0xff800000, 0x3400000}, | ||
| 8766 | {0x3400000, 0xff800000, 0x800002, 0xff800000, 0x3400000}, | ||
| 8767 | {0x3400000, 0xff800000, 0x1398437, 0xff800000, 0x3400000}, | ||
| 8768 | {0x3400000, 0xff800000, 0xba98d27, 0xff800000, 0x3400000}, | ||
| 8769 | {0x3400000, 0xff800000, 0xba98d7a, 0xff800000, 0x3400000}, | ||
| 8770 | {0x3400000, 0xff800000, 0x751f853a, 0xff800000, 0x3400000}, | ||
| 8771 | {0x3400000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3400000}, | ||
| 8772 | {0x3400000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3400000}, | ||
| 8773 | {0x3400000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3400001}, | ||
| 8774 | {0x3400000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8775 | {0x3400000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8776 | {0x3400000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8777 | {0x3400000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 8778 | {0x3400000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8779 | {0x3400000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 8780 | {0x3400000, 0xff800000, 0x80000000, 0xff800000, 0x3400000}, | ||
| 8781 | {0x3400000, 0xff800000, 0x80000001, 0xff800000, 0x3400080}, | ||
| 8782 | {0x3400000, 0xff800000, 0x80000076, 0xff800000, 0x3400080}, | ||
| 8783 | {0x3400000, 0xff800000, 0x80002b94, 0xff800000, 0x3400080}, | ||
| 8784 | {0x3400000, 0xff800000, 0x80636d24, 0xff800000, 0x3400080}, | ||
| 8785 | {0x3400000, 0xff800000, 0x807fffff, 0xff800000, 0x3400080}, | ||
| 8786 | {0x3400000, 0xff800000, 0x80800000, 0xff800000, 0x3400000}, | ||
| 8787 | {0x3400000, 0xff800000, 0x80800002, 0xff800000, 0x3400000}, | ||
| 8788 | {0x3400000, 0xff800000, 0x81398437, 0xff800000, 0x3400000}, | ||
| 8789 | {0x3400000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3400000}, | ||
| 8790 | {0x3400000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3400000}, | ||
| 8791 | {0x3400000, 0xff800000, 0xf51f853a, 0xff800000, 0x3400000}, | ||
| 8792 | {0x3400000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3400000}, | ||
| 8793 | {0x3400000, 0xff800000, 0xff7fffff, 0xff800000, 0x3400000}, | ||
| 8794 | {0x3400000, 0xff800000, 0xff800000, 0xff800000, 0x3400000}, | ||
| 8795 | {0x3400000, 0xff800000, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8796 | {0x3400000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8797 | {0x3400000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8798 | {0x3400000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 8799 | {0x3400000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 8800 | {0x3400000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 8801 | {0x3400000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3400000}, | ||
| 8802 | {0x3400000, 0xff800000, 0xe73a5134, 0xff800000, 0x3400000}, | ||
| 8803 | {0x3400000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3400000}, | ||
| 8804 | {0x3400000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3400000}, | ||
| 8805 | {0x3400000, 0xff800000, 0x9503366, 0xff800000, 0x3400000}, | ||
| 8806 | {0x3400000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3400000}, | ||
| 8807 | {0x3400000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3400000}, | ||
| 8808 | {0x3400000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3400000}, | ||
| 8809 | {0x3400000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3400000}, | ||
| 8810 | {0x3400000, 0xff800000, 0x966320b, 0xff800000, 0x3400000}, | ||
| 8811 | {0x3400000, 0xff800000, 0xb26bddee, 0xff800000, 0x3400000}, | ||
| 8812 | {0x3400000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3400000}, | ||
| 8813 | {0x3400000, 0xff800000, 0x317285d3, 0xff800000, 0x3400000}, | ||
| 8814 | {0x3400000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3400000}, | ||
| 8815 | {0x3400000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3400000}, | ||
| 8816 | {0x3400000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3400000}, | ||
| 8817 | {0x3400000, 0xff800001, 0x0, 0x7fc00000, 0x3400001}, | ||
| 8818 | {0x3400000, 0xff800001, 0x1, 0x7fc00000, 0x3400081}, | ||
| 8819 | {0x3400000, 0xff800001, 0x76, 0x7fc00000, 0x3400081}, | ||
| 8820 | {0x3400000, 0xff800001, 0x2b94, 0x7fc00000, 0x3400081}, | ||
| 8821 | {0x3400000, 0xff800001, 0x636d24, 0x7fc00000, 0x3400081}, | ||
| 8822 | {0x3400000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3400081}, | ||
| 8823 | {0x3400000, 0xff800001, 0x800000, 0x7fc00000, 0x3400001}, | ||
| 8824 | {0x3400000, 0xff800001, 0x800002, 0x7fc00000, 0x3400001}, | ||
| 8825 | {0x3400000, 0xff800001, 0x1398437, 0x7fc00000, 0x3400001}, | ||
| 8826 | {0x3400000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3400001}, | ||
| 8827 | {0x3400000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3400001}, | ||
| 8828 | {0x3400000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3400001}, | ||
| 8829 | {0x3400000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3400001}, | ||
| 8830 | {0x3400000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3400001}, | ||
| 8831 | {0x3400000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3400001}, | ||
| 8832 | {0x3400000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8833 | {0x3400000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8834 | {0x3400000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8835 | {0x3400000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3400001}, | ||
| 8836 | {0x3400000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3400001}, | ||
| 8837 | {0x3400000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3400001}, | ||
| 8838 | {0x3400000, 0xff800001, 0x80000000, 0x7fc00000, 0x3400001}, | ||
| 8839 | {0x3400000, 0xff800001, 0x80000001, 0x7fc00000, 0x3400081}, | ||
| 8840 | {0x3400000, 0xff800001, 0x80000076, 0x7fc00000, 0x3400081}, | ||
| 8841 | {0x3400000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3400081}, | ||
| 8842 | {0x3400000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3400081}, | ||
| 8843 | {0x3400000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3400081}, | ||
| 8844 | {0x3400000, 0xff800001, 0x80800000, 0x7fc00000, 0x3400001}, | ||
| 8845 | {0x3400000, 0xff800001, 0x80800002, 0x7fc00000, 0x3400001}, | ||
| 8846 | {0x3400000, 0xff800001, 0x81398437, 0x7fc00000, 0x3400001}, | ||
| 8847 | {0x3400000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3400001}, | ||
| 8848 | {0x3400000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3400001}, | ||
| 8849 | {0x3400000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3400001}, | ||
| 8850 | {0x3400000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3400001}, | ||
| 8851 | {0x3400000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3400001}, | ||
| 8852 | {0x3400000, 0xff800001, 0xff800000, 0x7fc00000, 0x3400001}, | ||
| 8853 | {0x3400000, 0xff800001, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8854 | {0x3400000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8855 | {0x3400000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8856 | {0x3400000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3400001}, | ||
| 8857 | {0x3400000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3400001}, | ||
| 8858 | {0x3400000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3400001}, | ||
| 8859 | {0x3400000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3400001}, | ||
| 8860 | {0x3400000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3400001}, | ||
| 8861 | {0x3400000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3400001}, | ||
| 8862 | {0x3400000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3400001}, | ||
| 8863 | {0x3400000, 0xff800001, 0x9503366, 0x7fc00000, 0x3400001}, | ||
| 8864 | {0x3400000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3400001}, | ||
| 8865 | {0x3400000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3400001}, | ||
| 8866 | {0x3400000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3400001}, | ||
| 8867 | {0x3400000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3400001}, | ||
| 8868 | {0x3400000, 0xff800001, 0x966320b, 0x7fc00000, 0x3400001}, | ||
| 8869 | {0x3400000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3400001}, | ||
| 8870 | {0x3400000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, | ||
| 8871 | {0x3400000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3400001}, | ||
| 8872 | {0x3400000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3400001}, | ||
| 8873 | {0x3400000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3400001}, | ||
| 8874 | {0x3400000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3400001}, | ||
| 8875 | {0x3400000, 0xff984a37, 0x0, 0x7fc00000, 0x3400001}, | ||
| 8876 | {0x3400000, 0xff984a37, 0x1, 0x7fc00000, 0x3400081}, | ||
| 8877 | {0x3400000, 0xff984a37, 0x76, 0x7fc00000, 0x3400081}, | ||
| 8878 | {0x3400000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3400081}, | ||
| 8879 | {0x3400000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3400081}, | ||
| 8880 | {0x3400000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3400081}, | ||
| 8881 | {0x3400000, 0xff984a37, 0x800000, 0x7fc00000, 0x3400001}, | ||
| 8882 | {0x3400000, 0xff984a37, 0x800002, 0x7fc00000, 0x3400001}, | ||
| 8883 | {0x3400000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3400001}, | ||
| 8884 | {0x3400000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3400001}, | ||
| 8885 | {0x3400000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3400001}, | ||
| 8886 | {0x3400000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3400001}, | ||
| 8887 | {0x3400000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3400001}, | ||
| 8888 | {0x3400000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3400001}, | ||
| 8889 | {0x3400000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3400001}, | ||
| 8890 | {0x3400000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8891 | {0x3400000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8892 | {0x3400000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8893 | {0x3400000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3400001}, | ||
| 8894 | {0x3400000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3400001}, | ||
| 8895 | {0x3400000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3400001}, | ||
| 8896 | {0x3400000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3400001}, | ||
| 8897 | {0x3400000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3400081}, | ||
| 8898 | {0x3400000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3400081}, | ||
| 8899 | {0x3400000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3400081}, | ||
| 8900 | {0x3400000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3400081}, | ||
| 8901 | {0x3400000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3400081}, | ||
| 8902 | {0x3400000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3400001}, | ||
| 8903 | {0x3400000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3400001}, | ||
| 8904 | {0x3400000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3400001}, | ||
| 8905 | {0x3400000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3400001}, | ||
| 8906 | {0x3400000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3400001}, | ||
| 8907 | {0x3400000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3400001}, | ||
| 8908 | {0x3400000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3400001}, | ||
| 8909 | {0x3400000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3400001}, | ||
| 8910 | {0x3400000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3400001}, | ||
| 8911 | {0x3400000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8912 | {0x3400000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8913 | {0x3400000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8914 | {0x3400000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3400001}, | ||
| 8915 | {0x3400000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3400001}, | ||
| 8916 | {0x3400000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3400001}, | ||
| 8917 | {0x3400000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3400001}, | ||
| 8918 | {0x3400000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3400001}, | ||
| 8919 | {0x3400000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3400001}, | ||
| 8920 | {0x3400000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3400001}, | ||
| 8921 | {0x3400000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3400001}, | ||
| 8922 | {0x3400000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3400001}, | ||
| 8923 | {0x3400000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3400001}, | ||
| 8924 | {0x3400000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3400001}, | ||
| 8925 | {0x3400000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3400001}, | ||
| 8926 | {0x3400000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3400001}, | ||
| 8927 | {0x3400000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3400001}, | ||
| 8928 | {0x3400000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, | ||
| 8929 | {0x3400000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3400001}, | ||
| 8930 | {0x3400000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3400001}, | ||
| 8931 | {0x3400000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3400001}, | ||
| 8932 | {0x3400000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3400001}, | ||
| 8933 | {0x3400000, 0xffbfffff, 0x0, 0x7fc00000, 0x3400001}, | ||
| 8934 | {0x3400000, 0xffbfffff, 0x1, 0x7fc00000, 0x3400081}, | ||
| 8935 | {0x3400000, 0xffbfffff, 0x76, 0x7fc00000, 0x3400081}, | ||
| 8936 | {0x3400000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3400081}, | ||
| 8937 | {0x3400000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3400081}, | ||
| 8938 | {0x3400000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3400081}, | ||
| 8939 | {0x3400000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3400001}, | ||
| 8940 | {0x3400000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3400001}, | ||
| 8941 | {0x3400000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3400001}, | ||
| 8942 | {0x3400000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3400001}, | ||
| 8943 | {0x3400000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3400001}, | ||
| 8944 | {0x3400000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3400001}, | ||
| 8945 | {0x3400000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3400001}, | ||
| 8946 | {0x3400000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3400001}, | ||
| 8947 | {0x3400000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3400001}, | ||
| 8948 | {0x3400000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 8949 | {0x3400000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 8950 | {0x3400000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 8951 | {0x3400000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3400001}, | ||
| 8952 | {0x3400000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3400001}, | ||
| 8953 | {0x3400000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3400001}, | ||
| 8954 | {0x3400000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3400001}, | ||
| 8955 | {0x3400000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3400081}, | ||
| 8956 | {0x3400000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3400081}, | ||
| 8957 | {0x3400000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3400081}, | ||
| 8958 | {0x3400000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3400081}, | ||
| 8959 | {0x3400000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3400081}, | ||
| 8960 | {0x3400000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3400001}, | ||
| 8961 | {0x3400000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3400001}, | ||
| 8962 | {0x3400000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3400001}, | ||
| 8963 | {0x3400000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3400001}, | ||
| 8964 | {0x3400000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3400001}, | ||
| 8965 | {0x3400000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3400001}, | ||
| 8966 | {0x3400000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3400001}, | ||
| 8967 | {0x3400000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3400001}, | ||
| 8968 | {0x3400000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3400001}, | ||
| 8969 | {0x3400000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 8970 | {0x3400000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 8971 | {0x3400000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 8972 | {0x3400000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3400001}, | ||
| 8973 | {0x3400000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3400001}, | ||
| 8974 | {0x3400000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3400001}, | ||
| 8975 | {0x3400000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3400001}, | ||
| 8976 | {0x3400000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3400001}, | ||
| 8977 | {0x3400000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3400001}, | ||
| 8978 | {0x3400000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3400001}, | ||
| 8979 | {0x3400000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3400001}, | ||
| 8980 | {0x3400000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3400001}, | ||
| 8981 | {0x3400000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3400001}, | ||
| 8982 | {0x3400000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3400001}, | ||
| 8983 | {0x3400000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3400001}, | ||
| 8984 | {0x3400000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3400001}, | ||
| 8985 | {0x3400000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3400001}, | ||
| 8986 | {0x3400000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, | ||
| 8987 | {0x3400000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3400001}, | ||
| 8988 | {0x3400000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3400001}, | ||
| 8989 | {0x3400000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3400001}, | ||
| 8990 | {0x3400000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3400001}, | ||
| 8991 | {0x3400000, 0xffc00000, 0x0, 0x7fc00000, 0x3400000}, | ||
| 8992 | {0x3400000, 0xffc00000, 0x1, 0x7fc00000, 0x3400080}, | ||
| 8993 | {0x3400000, 0xffc00000, 0x76, 0x7fc00000, 0x3400080}, | ||
| 8994 | {0x3400000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3400080}, | ||
| 8995 | {0x3400000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3400080}, | ||
| 8996 | {0x3400000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3400080}, | ||
| 8997 | {0x3400000, 0xffc00000, 0x800000, 0x7fc00000, 0x3400000}, | ||
| 8998 | {0x3400000, 0xffc00000, 0x800002, 0x7fc00000, 0x3400000}, | ||
| 8999 | {0x3400000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3400000}, | ||
| 9000 | {0x3400000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3400000}, | ||
| 9001 | {0x3400000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3400000}, | ||
| 9002 | {0x3400000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3400000}, | ||
| 9003 | {0x3400000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3400000}, | ||
| 9004 | {0x3400000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3400000}, | ||
| 9005 | {0x3400000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3400000}, | ||
| 9006 | {0x3400000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9007 | {0x3400000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9008 | {0x3400000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9009 | {0x3400000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9010 | {0x3400000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9011 | {0x3400000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9012 | {0x3400000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3400000}, | ||
| 9013 | {0x3400000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3400080}, | ||
| 9014 | {0x3400000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3400080}, | ||
| 9015 | {0x3400000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3400080}, | ||
| 9016 | {0x3400000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3400080}, | ||
| 9017 | {0x3400000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3400080}, | ||
| 9018 | {0x3400000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3400000}, | ||
| 9019 | {0x3400000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3400000}, | ||
| 9020 | {0x3400000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3400000}, | ||
| 9021 | {0x3400000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3400000}, | ||
| 9022 | {0x3400000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3400000}, | ||
| 9023 | {0x3400000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3400000}, | ||
| 9024 | {0x3400000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3400000}, | ||
| 9025 | {0x3400000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3400000}, | ||
| 9026 | {0x3400000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3400000}, | ||
| 9027 | {0x3400000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9028 | {0x3400000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9029 | {0x3400000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9030 | {0x3400000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9031 | {0x3400000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9032 | {0x3400000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9033 | {0x3400000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3400000}, | ||
| 9034 | {0x3400000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3400000}, | ||
| 9035 | {0x3400000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3400000}, | ||
| 9036 | {0x3400000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3400000}, | ||
| 9037 | {0x3400000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3400000}, | ||
| 9038 | {0x3400000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3400000}, | ||
| 9039 | {0x3400000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3400000}, | ||
| 9040 | {0x3400000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3400000}, | ||
| 9041 | {0x3400000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3400000}, | ||
| 9042 | {0x3400000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3400000}, | ||
| 9043 | {0x3400000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3400000}, | ||
| 9044 | {0x3400000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, | ||
| 9045 | {0x3400000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3400000}, | ||
| 9046 | {0x3400000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3400000}, | ||
| 9047 | {0x3400000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3400000}, | ||
| 9048 | {0x3400000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3400000}, | ||
| 9049 | {0x3400000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3400000}, | ||
| 9050 | {0x3400000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3400080}, | ||
| 9051 | {0x3400000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3400080}, | ||
| 9052 | {0x3400000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3400080}, | ||
| 9053 | {0x3400000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3400080}, | ||
| 9054 | {0x3400000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3400080}, | ||
| 9055 | {0x3400000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3400000}, | ||
| 9056 | {0x3400000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3400000}, | ||
| 9057 | {0x3400000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3400000}, | ||
| 9058 | {0x3400000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3400000}, | ||
| 9059 | {0x3400000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3400000}, | ||
| 9060 | {0x3400000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3400000}, | ||
| 9061 | {0x3400000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3400000}, | ||
| 9062 | {0x3400000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3400000}, | ||
| 9063 | {0x3400000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3400000}, | ||
| 9064 | {0x3400000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9065 | {0x3400000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9066 | {0x3400000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9067 | {0x3400000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9068 | {0x3400000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9069 | {0x3400000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9070 | {0x3400000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3400000}, | ||
| 9071 | {0x3400000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3400080}, | ||
| 9072 | {0x3400000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3400080}, | ||
| 9073 | {0x3400000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3400080}, | ||
| 9074 | {0x3400000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3400080}, | ||
| 9075 | {0x3400000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3400080}, | ||
| 9076 | {0x3400000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3400000}, | ||
| 9077 | {0x3400000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3400000}, | ||
| 9078 | {0x3400000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3400000}, | ||
| 9079 | {0x3400000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3400000}, | ||
| 9080 | {0x3400000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3400000}, | ||
| 9081 | {0x3400000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3400000}, | ||
| 9082 | {0x3400000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3400000}, | ||
| 9083 | {0x3400000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3400000}, | ||
| 9084 | {0x3400000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3400000}, | ||
| 9085 | {0x3400000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9086 | {0x3400000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9087 | {0x3400000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9088 | {0x3400000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9089 | {0x3400000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9090 | {0x3400000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9091 | {0x3400000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3400000}, | ||
| 9092 | {0x3400000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3400000}, | ||
| 9093 | {0x3400000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3400000}, | ||
| 9094 | {0x3400000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3400000}, | ||
| 9095 | {0x3400000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3400000}, | ||
| 9096 | {0x3400000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3400000}, | ||
| 9097 | {0x3400000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3400000}, | ||
| 9098 | {0x3400000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3400000}, | ||
| 9099 | {0x3400000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3400000}, | ||
| 9100 | {0x3400000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3400000}, | ||
| 9101 | {0x3400000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3400000}, | ||
| 9102 | {0x3400000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, | ||
| 9103 | {0x3400000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3400000}, | ||
| 9104 | {0x3400000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3400000}, | ||
| 9105 | {0x3400000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3400000}, | ||
| 9106 | {0x3400000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3400000}, | ||
| 9107 | {0x3400000, 0xffffffff, 0x0, 0x7fc00000, 0x3400000}, | ||
| 9108 | {0x3400000, 0xffffffff, 0x1, 0x7fc00000, 0x3400080}, | ||
| 9109 | {0x3400000, 0xffffffff, 0x76, 0x7fc00000, 0x3400080}, | ||
| 9110 | {0x3400000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3400080}, | ||
| 9111 | {0x3400000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3400080}, | ||
| 9112 | {0x3400000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3400080}, | ||
| 9113 | {0x3400000, 0xffffffff, 0x800000, 0x7fc00000, 0x3400000}, | ||
| 9114 | {0x3400000, 0xffffffff, 0x800002, 0x7fc00000, 0x3400000}, | ||
| 9115 | {0x3400000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3400000}, | ||
| 9116 | {0x3400000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3400000}, | ||
| 9117 | {0x3400000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3400000}, | ||
| 9118 | {0x3400000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3400000}, | ||
| 9119 | {0x3400000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3400000}, | ||
| 9120 | {0x3400000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3400000}, | ||
| 9121 | {0x3400000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3400000}, | ||
| 9122 | {0x3400000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9123 | {0x3400000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9124 | {0x3400000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9125 | {0x3400000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9126 | {0x3400000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9127 | {0x3400000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9128 | {0x3400000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3400000}, | ||
| 9129 | {0x3400000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3400080}, | ||
| 9130 | {0x3400000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3400080}, | ||
| 9131 | {0x3400000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3400080}, | ||
| 9132 | {0x3400000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3400080}, | ||
| 9133 | {0x3400000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3400080}, | ||
| 9134 | {0x3400000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3400000}, | ||
| 9135 | {0x3400000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3400000}, | ||
| 9136 | {0x3400000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3400000}, | ||
| 9137 | {0x3400000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3400000}, | ||
| 9138 | {0x3400000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3400000}, | ||
| 9139 | {0x3400000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3400000}, | ||
| 9140 | {0x3400000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3400000}, | ||
| 9141 | {0x3400000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3400000}, | ||
| 9142 | {0x3400000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3400000}, | ||
| 9143 | {0x3400000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9144 | {0x3400000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9145 | {0x3400000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9146 | {0x3400000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9147 | {0x3400000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9148 | {0x3400000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9149 | {0x3400000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3400000}, | ||
| 9150 | {0x3400000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3400000}, | ||
| 9151 | {0x3400000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3400000}, | ||
| 9152 | {0x3400000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3400000}, | ||
| 9153 | {0x3400000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3400000}, | ||
| 9154 | {0x3400000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3400000}, | ||
| 9155 | {0x3400000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3400000}, | ||
| 9156 | {0x3400000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3400000}, | ||
| 9157 | {0x3400000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3400000}, | ||
| 9158 | {0x3400000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3400000}, | ||
| 9159 | {0x3400000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3400000}, | ||
| 9160 | {0x3400000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, | ||
| 9161 | {0x3400000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3400000}, | ||
| 9162 | {0x3400000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3400000}, | ||
| 9163 | {0x3400000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3400000}, | ||
| 9164 | {0x3400000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3400000}, | ||
| 9165 | {0x3400000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3400000}, | ||
| 9166 | {0x3400000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3400080}, | ||
| 9167 | {0x3400000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3400080}, | ||
| 9168 | {0x3400000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3400080}, | ||
| 9169 | {0x3400000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3400080}, | ||
| 9170 | {0x3400000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3400080}, | ||
| 9171 | {0x3400000, 0x4f3495cb, 0x800000, 0x4f3495cc, 0x3400010}, | ||
| 9172 | {0x3400000, 0x4f3495cb, 0x800002, 0x4f3495cc, 0x3400010}, | ||
| 9173 | {0x3400000, 0x4f3495cb, 0x1398437, 0x4f3495cc, 0x3400010}, | ||
| 9174 | {0x3400000, 0x4f3495cb, 0xba98d27, 0x4f3495cc, 0x3400010}, | ||
| 9175 | {0x3400000, 0x4f3495cb, 0xba98d7a, 0x4f3495cc, 0x3400010}, | ||
| 9176 | {0x3400000, 0x4f3495cb, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 9177 | {0x3400000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 9178 | {0x3400000, 0x4f3495cb, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9179 | {0x3400000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9180 | {0x3400000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9181 | {0x3400000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9182 | {0x3400000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9183 | {0x3400000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9184 | {0x3400000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9185 | {0x3400000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9186 | {0x3400000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3400000}, | ||
| 9187 | {0x3400000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3400080}, | ||
| 9188 | {0x3400000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3400080}, | ||
| 9189 | {0x3400000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3400080}, | ||
| 9190 | {0x3400000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3400080}, | ||
| 9191 | {0x3400000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3400080}, | ||
| 9192 | {0x3400000, 0x4f3495cb, 0x80800000, 0x4f3495cb, 0x3400010}, | ||
| 9193 | {0x3400000, 0x4f3495cb, 0x80800002, 0x4f3495cb, 0x3400010}, | ||
| 9194 | {0x3400000, 0x4f3495cb, 0x81398437, 0x4f3495cb, 0x3400010}, | ||
| 9195 | {0x3400000, 0x4f3495cb, 0x8ba98d27, 0x4f3495cb, 0x3400010}, | ||
| 9196 | {0x3400000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495cb, 0x3400010}, | ||
| 9197 | {0x3400000, 0x4f3495cb, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 9198 | {0x3400000, 0x4f3495cb, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 9199 | {0x3400000, 0x4f3495cb, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 9200 | {0x3400000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9201 | {0x3400000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9202 | {0x3400000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9203 | {0x3400000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9204 | {0x3400000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9205 | {0x3400000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9206 | {0x3400000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9207 | {0x3400000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3400000}, | ||
| 9208 | {0x3400000, 0x4f3495cb, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 9209 | {0x3400000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 9210 | {0x3400000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 9211 | {0x3400000, 0x4f3495cb, 0x9503366, 0x4f3495cc, 0x3400010}, | ||
| 9212 | {0x3400000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495cb, 0x3400010}, | ||
| 9213 | {0x3400000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 9214 | {0x3400000, 0x4f3495cb, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 9215 | {0x3400000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495cb, 0x3400010}, | ||
| 9216 | {0x3400000, 0x4f3495cb, 0x966320b, 0x4f3495cc, 0x3400010}, | ||
| 9217 | {0x3400000, 0x4f3495cb, 0xb26bddee, 0x4f3495cb, 0x3400010}, | ||
| 9218 | {0x3400000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495cb, 0x3400010}, | ||
| 9219 | {0x3400000, 0x4f3495cb, 0x317285d3, 0x4f3495cc, 0x3400010}, | ||
| 9220 | {0x3400000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cc, 0x3400010}, | ||
| 9221 | {0x3400000, 0x4f3495cb, 0x51fd2c7c, 0x52016896, 0x3400010}, | ||
| 9222 | {0x3400000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 9223 | {0x3400000, 0xe73a5134, 0x0, 0xe73a5134, 0x3400000}, | ||
| 9224 | {0x3400000, 0xe73a5134, 0x1, 0xe73a5134, 0x3400080}, | ||
| 9225 | {0x3400000, 0xe73a5134, 0x76, 0xe73a5134, 0x3400080}, | ||
| 9226 | {0x3400000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3400080}, | ||
| 9227 | {0x3400000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3400080}, | ||
| 9228 | {0x3400000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3400080}, | ||
| 9229 | {0x3400000, 0xe73a5134, 0x800000, 0xe73a5133, 0x3400010}, | ||
| 9230 | {0x3400000, 0xe73a5134, 0x800002, 0xe73a5133, 0x3400010}, | ||
| 9231 | {0x3400000, 0xe73a5134, 0x1398437, 0xe73a5133, 0x3400010}, | ||
| 9232 | {0x3400000, 0xe73a5134, 0xba98d27, 0xe73a5133, 0x3400010}, | ||
| 9233 | {0x3400000, 0xe73a5134, 0xba98d7a, 0xe73a5133, 0x3400010}, | ||
| 9234 | {0x3400000, 0xe73a5134, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 9235 | {0x3400000, 0xe73a5134, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 9236 | {0x3400000, 0xe73a5134, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 9237 | {0x3400000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9238 | {0x3400000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9239 | {0x3400000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9240 | {0x3400000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9241 | {0x3400000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9242 | {0x3400000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9243 | {0x3400000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9244 | {0x3400000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3400000}, | ||
| 9245 | {0x3400000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3400080}, | ||
| 9246 | {0x3400000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3400080}, | ||
| 9247 | {0x3400000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3400080}, | ||
| 9248 | {0x3400000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3400080}, | ||
| 9249 | {0x3400000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3400080}, | ||
| 9250 | {0x3400000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3400010}, | ||
| 9251 | {0x3400000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3400010}, | ||
| 9252 | {0x3400000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3400010}, | ||
| 9253 | {0x3400000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3400010}, | ||
| 9254 | {0x3400000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3400010}, | ||
| 9255 | {0x3400000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 9256 | {0x3400000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 9257 | {0x3400000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 9258 | {0x3400000, 0xe73a5134, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9259 | {0x3400000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9260 | {0x3400000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9261 | {0x3400000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9262 | {0x3400000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9263 | {0x3400000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9264 | {0x3400000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9265 | {0x3400000, 0xe73a5134, 0x4f3495cb, 0xe73a5133, 0x3400010}, | ||
| 9266 | {0x3400000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3400000}, | ||
| 9267 | {0x3400000, 0xe73a5134, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 9268 | {0x3400000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3400010}, | ||
| 9269 | {0x3400000, 0xe73a5134, 0x9503366, 0xe73a5133, 0x3400010}, | ||
| 9270 | {0x3400000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3400010}, | ||
| 9271 | {0x3400000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3400000}, | ||
| 9272 | {0x3400000, 0xe73a5134, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 9273 | {0x3400000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3400010}, | ||
| 9274 | {0x3400000, 0xe73a5134, 0x966320b, 0xe73a5133, 0x3400010}, | ||
| 9275 | {0x3400000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3400010}, | ||
| 9276 | {0x3400000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3400010}, | ||
| 9277 | {0x3400000, 0xe73a5134, 0x317285d3, 0xe73a5133, 0x3400010}, | ||
| 9278 | {0x3400000, 0xe73a5134, 0x3c9623b1, 0xe73a5133, 0x3400010}, | ||
| 9279 | {0x3400000, 0xe73a5134, 0x51fd2c7c, 0xe73a5133, 0x3400010}, | ||
| 9280 | {0x3400000, 0xe73a5134, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 9281 | {0x3400000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3400000}, | ||
| 9282 | {0x3400000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3400080}, | ||
| 9283 | {0x3400000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3400080}, | ||
| 9284 | {0x3400000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3400080}, | ||
| 9285 | {0x3400000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3400080}, | ||
| 9286 | {0x3400000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3400080}, | ||
| 9287 | {0x3400000, 0x7c994e9e, 0x800000, 0x7c994e9f, 0x3400010}, | ||
| 9288 | {0x3400000, 0x7c994e9e, 0x800002, 0x7c994e9f, 0x3400010}, | ||
| 9289 | {0x3400000, 0x7c994e9e, 0x1398437, 0x7c994e9f, 0x3400010}, | ||
| 9290 | {0x3400000, 0x7c994e9e, 0xba98d27, 0x7c994e9f, 0x3400010}, | ||
| 9291 | {0x3400000, 0x7c994e9e, 0xba98d7a, 0x7c994e9f, 0x3400010}, | ||
| 9292 | {0x3400000, 0x7c994e9e, 0x751f853a, 0x7c994fde, 0x3400010}, | ||
| 9293 | {0x3400000, 0x7c994e9e, 0x7f7ffff0, 0x7f800000, 0x3400014}, | ||
| 9294 | {0x3400000, 0x7c994e9e, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9295 | {0x3400000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9296 | {0x3400000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9297 | {0x3400000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9298 | {0x3400000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9299 | {0x3400000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9300 | {0x3400000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9301 | {0x3400000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9302 | {0x3400000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3400000}, | ||
| 9303 | {0x3400000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3400080}, | ||
| 9304 | {0x3400000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3400080}, | ||
| 9305 | {0x3400000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3400080}, | ||
| 9306 | {0x3400000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3400080}, | ||
| 9307 | {0x3400000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3400080}, | ||
| 9308 | {0x3400000, 0x7c994e9e, 0x80800000, 0x7c994e9e, 0x3400010}, | ||
| 9309 | {0x3400000, 0x7c994e9e, 0x80800002, 0x7c994e9e, 0x3400010}, | ||
| 9310 | {0x3400000, 0x7c994e9e, 0x81398437, 0x7c994e9e, 0x3400010}, | ||
| 9311 | {0x3400000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9e, 0x3400010}, | ||
| 9312 | {0x3400000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9e, 0x3400010}, | ||
| 9313 | {0x3400000, 0x7c994e9e, 0xf51f853a, 0x7c994d5f, 0x3400010}, | ||
| 9314 | {0x3400000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3400010}, | ||
| 9315 | {0x3400000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3400010}, | ||
| 9316 | {0x3400000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9317 | {0x3400000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9318 | {0x3400000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9319 | {0x3400000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9320 | {0x3400000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9321 | {0x3400000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9322 | {0x3400000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9323 | {0x3400000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9f, 0x3400010}, | ||
| 9324 | {0x3400000, 0x7c994e9e, 0xe73a5134, 0x7c994e9e, 0x3400010}, | ||
| 9325 | {0x3400000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3400000}, | ||
| 9326 | {0x3400000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9f, 0x3400010}, | ||
| 9327 | {0x3400000, 0x7c994e9e, 0x9503366, 0x7c994e9f, 0x3400010}, | ||
| 9328 | {0x3400000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9e, 0x3400010}, | ||
| 9329 | {0x3400000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9e, 0x3400010}, | ||
| 9330 | {0x3400000, 0x7c994e9e, 0x77f31e2f, 0x7c998b66, 0x3400010}, | ||
| 9331 | {0x3400000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9e, 0x3400010}, | ||
| 9332 | {0x3400000, 0x7c994e9e, 0x966320b, 0x7c994e9f, 0x3400010}, | ||
| 9333 | {0x3400000, 0x7c994e9e, 0xb26bddee, 0x7c994e9e, 0x3400010}, | ||
| 9334 | {0x3400000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9e, 0x3400010}, | ||
| 9335 | {0x3400000, 0x7c994e9e, 0x317285d3, 0x7c994e9f, 0x3400010}, | ||
| 9336 | {0x3400000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9f, 0x3400010}, | ||
| 9337 | {0x3400000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9f, 0x3400010}, | ||
| 9338 | {0x3400000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3400000}, | ||
| 9339 | {0x3400000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3400000}, | ||
| 9340 | {0x3400000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3400080}, | ||
| 9341 | {0x3400000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3400080}, | ||
| 9342 | {0x3400000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3400080}, | ||
| 9343 | {0x3400000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3400080}, | ||
| 9344 | {0x3400000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3400080}, | ||
| 9345 | {0x3400000, 0x6164bd6c, 0x800000, 0x6164bd6d, 0x3400010}, | ||
| 9346 | {0x3400000, 0x6164bd6c, 0x800002, 0x6164bd6d, 0x3400010}, | ||
| 9347 | {0x3400000, 0x6164bd6c, 0x1398437, 0x6164bd6d, 0x3400010}, | ||
| 9348 | {0x3400000, 0x6164bd6c, 0xba98d27, 0x6164bd6d, 0x3400010}, | ||
| 9349 | {0x3400000, 0x6164bd6c, 0xba98d7a, 0x6164bd6d, 0x3400010}, | ||
| 9350 | {0x3400000, 0x6164bd6c, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 9351 | {0x3400000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 9352 | {0x3400000, 0x6164bd6c, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9353 | {0x3400000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9354 | {0x3400000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9355 | {0x3400000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9356 | {0x3400000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9357 | {0x3400000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9358 | {0x3400000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9359 | {0x3400000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9360 | {0x3400000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3400000}, | ||
| 9361 | {0x3400000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3400080}, | ||
| 9362 | {0x3400000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3400080}, | ||
| 9363 | {0x3400000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3400080}, | ||
| 9364 | {0x3400000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3400080}, | ||
| 9365 | {0x3400000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3400080}, | ||
| 9366 | {0x3400000, 0x6164bd6c, 0x80800000, 0x6164bd6c, 0x3400010}, | ||
| 9367 | {0x3400000, 0x6164bd6c, 0x80800002, 0x6164bd6c, 0x3400010}, | ||
| 9368 | {0x3400000, 0x6164bd6c, 0x81398437, 0x6164bd6c, 0x3400010}, | ||
| 9369 | {0x3400000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6c, 0x3400010}, | ||
| 9370 | {0x3400000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6c, 0x3400010}, | ||
| 9371 | {0x3400000, 0x6164bd6c, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 9372 | {0x3400000, 0x6164bd6c, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 9373 | {0x3400000, 0x6164bd6c, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 9374 | {0x3400000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9375 | {0x3400000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9376 | {0x3400000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9377 | {0x3400000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9378 | {0x3400000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9379 | {0x3400000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9380 | {0x3400000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9381 | {0x3400000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6d, 0x3400010}, | ||
| 9382 | {0x3400000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3400010}, | ||
| 9383 | {0x3400000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 9384 | {0x3400000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3400000}, | ||
| 9385 | {0x3400000, 0x6164bd6c, 0x9503366, 0x6164bd6d, 0x3400010}, | ||
| 9386 | {0x3400000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6c, 0x3400010}, | ||
| 9387 | {0x3400000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3400010}, | ||
| 9388 | {0x3400000, 0x6164bd6c, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 9389 | {0x3400000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6c, 0x3400010}, | ||
| 9390 | {0x3400000, 0x6164bd6c, 0x966320b, 0x6164bd6d, 0x3400010}, | ||
| 9391 | {0x3400000, 0x6164bd6c, 0xb26bddee, 0x6164bd6c, 0x3400010}, | ||
| 9392 | {0x3400000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6c, 0x3400010}, | ||
| 9393 | {0x3400000, 0x6164bd6c, 0x317285d3, 0x6164bd6d, 0x3400010}, | ||
| 9394 | {0x3400000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6d, 0x3400010}, | ||
| 9395 | {0x3400000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6d, 0x3400010}, | ||
| 9396 | {0x3400000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 9397 | {0x3400000, 0x9503366, 0x0, 0x9503366, 0x3400000}, | ||
| 9398 | {0x3400000, 0x9503366, 0x1, 0x9503366, 0x3400080}, | ||
| 9399 | {0x3400000, 0x9503366, 0x76, 0x9503366, 0x3400080}, | ||
| 9400 | {0x3400000, 0x9503366, 0x2b94, 0x9503366, 0x3400080}, | ||
| 9401 | {0x3400000, 0x9503366, 0x636d24, 0x9503366, 0x3400080}, | ||
| 9402 | {0x3400000, 0x9503366, 0x7fffff, 0x9503366, 0x3400080}, | ||
| 9403 | {0x3400000, 0x9503366, 0x800000, 0x95033a6, 0x3400000}, | ||
| 9404 | {0x3400000, 0x9503366, 0x800002, 0x95033a7, 0x3400010}, | ||
| 9405 | {0x3400000, 0x9503366, 0x1398437, 0x9503420, 0x3400010}, | ||
| 9406 | {0x3400000, 0x9503366, 0xba98d27, 0xbb00ec3, 0x3400010}, | ||
| 9407 | {0x3400000, 0x9503366, 0xba98d7a, 0xbb00f16, 0x3400010}, | ||
| 9408 | {0x3400000, 0x9503366, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 9409 | {0x3400000, 0x9503366, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 9410 | {0x3400000, 0x9503366, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9411 | {0x3400000, 0x9503366, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9412 | {0x3400000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9413 | {0x3400000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9414 | {0x3400000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9415 | {0x3400000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9416 | {0x3400000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9417 | {0x3400000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9418 | {0x3400000, 0x9503366, 0x80000000, 0x9503366, 0x3400000}, | ||
| 9419 | {0x3400000, 0x9503366, 0x80000001, 0x9503366, 0x3400080}, | ||
| 9420 | {0x3400000, 0x9503366, 0x80000076, 0x9503366, 0x3400080}, | ||
| 9421 | {0x3400000, 0x9503366, 0x80002b94, 0x9503366, 0x3400080}, | ||
| 9422 | {0x3400000, 0x9503366, 0x80636d24, 0x9503366, 0x3400080}, | ||
| 9423 | {0x3400000, 0x9503366, 0x807fffff, 0x9503366, 0x3400080}, | ||
| 9424 | {0x3400000, 0x9503366, 0x80800000, 0x9503326, 0x3400000}, | ||
| 9425 | {0x3400000, 0x9503366, 0x80800002, 0x9503326, 0x3400010}, | ||
| 9426 | {0x3400000, 0x9503366, 0x81398437, 0x95032ad, 0x3400010}, | ||
| 9427 | {0x3400000, 0x9503366, 0x8ba98d27, 0x8ba30b8b, 0x3400010}, | ||
| 9428 | {0x3400000, 0x9503366, 0x8ba98d7a, 0x8ba30bde, 0x3400010}, | ||
| 9429 | {0x3400000, 0x9503366, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 9430 | {0x3400000, 0x9503366, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 9431 | {0x3400000, 0x9503366, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 9432 | {0x3400000, 0x9503366, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9433 | {0x3400000, 0x9503366, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9434 | {0x3400000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9435 | {0x3400000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9436 | {0x3400000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9437 | {0x3400000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9438 | {0x3400000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9439 | {0x3400000, 0x9503366, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 9440 | {0x3400000, 0x9503366, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 9441 | {0x3400000, 0x9503366, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 9442 | {0x3400000, 0x9503366, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 9443 | {0x3400000, 0x9503366, 0x9503366, 0x9d03366, 0x3400000}, | ||
| 9444 | {0x3400000, 0x9503366, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, | ||
| 9445 | {0x3400000, 0x9503366, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 9446 | {0x3400000, 0x9503366, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 9447 | {0x3400000, 0x9503366, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, | ||
| 9448 | {0x3400000, 0x9503366, 0x966320b, 0x9db32b9, 0x3400010}, | ||
| 9449 | {0x3400000, 0x9503366, 0xb26bddee, 0xb26bdded, 0x3400010}, | ||
| 9450 | {0x3400000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, | ||
| 9451 | {0x3400000, 0x9503366, 0x317285d3, 0x317285d4, 0x3400010}, | ||
| 9452 | {0x3400000, 0x9503366, 0x3c9623b1, 0x3c9623b2, 0x3400010}, | ||
| 9453 | {0x3400000, 0x9503366, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 9454 | {0x3400000, 0x9503366, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 9455 | {0x3400000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3400000}, | ||
| 9456 | {0x3400000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3400080}, | ||
| 9457 | {0x3400000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3400080}, | ||
| 9458 | {0x3400000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3400080}, | ||
| 9459 | {0x3400000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3400080}, | ||
| 9460 | {0x3400000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3400080}, | ||
| 9461 | {0x3400000, 0xbf5a97c9, 0x800000, 0xbf5a97c8, 0x3400010}, | ||
| 9462 | {0x3400000, 0xbf5a97c9, 0x800002, 0xbf5a97c8, 0x3400010}, | ||
| 9463 | {0x3400000, 0xbf5a97c9, 0x1398437, 0xbf5a97c8, 0x3400010}, | ||
| 9464 | {0x3400000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c8, 0x3400010}, | ||
| 9465 | {0x3400000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c8, 0x3400010}, | ||
| 9466 | {0x3400000, 0xbf5a97c9, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 9467 | {0x3400000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 9468 | {0x3400000, 0xbf5a97c9, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 9469 | {0x3400000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9470 | {0x3400000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9471 | {0x3400000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9472 | {0x3400000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9473 | {0x3400000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9474 | {0x3400000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9475 | {0x3400000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9476 | {0x3400000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3400000}, | ||
| 9477 | {0x3400000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3400080}, | ||
| 9478 | {0x3400000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3400080}, | ||
| 9479 | {0x3400000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3400080}, | ||
| 9480 | {0x3400000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3400080}, | ||
| 9481 | {0x3400000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3400080}, | ||
| 9482 | {0x3400000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3400010}, | ||
| 9483 | {0x3400000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3400010}, | ||
| 9484 | {0x3400000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3400010}, | ||
| 9485 | {0x3400000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3400010}, | ||
| 9486 | {0x3400000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3400010}, | ||
| 9487 | {0x3400000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 9488 | {0x3400000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 9489 | {0x3400000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 9490 | {0x3400000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9491 | {0x3400000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9492 | {0x3400000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9493 | {0x3400000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9494 | {0x3400000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9495 | {0x3400000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9496 | {0x3400000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9497 | {0x3400000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 9498 | {0x3400000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 9499 | {0x3400000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 9500 | {0x3400000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 9501 | {0x3400000, 0xbf5a97c9, 0x9503366, 0xbf5a97c8, 0x3400010}, | ||
| 9502 | {0x3400000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3400000}, | ||
| 9503 | {0x3400000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 9504 | {0x3400000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 9505 | {0x3400000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3400010}, | ||
| 9506 | {0x3400000, 0xbf5a97c9, 0x966320b, 0xbf5a97c8, 0x3400010}, | ||
| 9507 | {0x3400000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3400010}, | ||
| 9508 | {0x3400000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3400010}, | ||
| 9509 | {0x3400000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c8, 0x3400010}, | ||
| 9510 | {0x3400000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3400010}, | ||
| 9511 | {0x3400000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 9512 | {0x3400000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 9513 | {0x3400000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3400000}, | ||
| 9514 | {0x3400000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3400080}, | ||
| 9515 | {0x3400000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3400080}, | ||
| 9516 | {0x3400000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3400080}, | ||
| 9517 | {0x3400000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3400080}, | ||
| 9518 | {0x3400000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3400080}, | ||
| 9519 | {0x3400000, 0xe6ff1a14, 0x800000, 0xe6ff1a13, 0x3400010}, | ||
| 9520 | {0x3400000, 0xe6ff1a14, 0x800002, 0xe6ff1a13, 0x3400010}, | ||
| 9521 | {0x3400000, 0xe6ff1a14, 0x1398437, 0xe6ff1a13, 0x3400010}, | ||
| 9522 | {0x3400000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a13, 0x3400010}, | ||
| 9523 | {0x3400000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a13, 0x3400010}, | ||
| 9524 | {0x3400000, 0xe6ff1a14, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 9525 | {0x3400000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 9526 | {0x3400000, 0xe6ff1a14, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 9527 | {0x3400000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9528 | {0x3400000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9529 | {0x3400000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9530 | {0x3400000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9531 | {0x3400000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9532 | {0x3400000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9533 | {0x3400000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9534 | {0x3400000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3400000}, | ||
| 9535 | {0x3400000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3400080}, | ||
| 9536 | {0x3400000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3400080}, | ||
| 9537 | {0x3400000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3400080}, | ||
| 9538 | {0x3400000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3400080}, | ||
| 9539 | {0x3400000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3400080}, | ||
| 9540 | {0x3400000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3400010}, | ||
| 9541 | {0x3400000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3400010}, | ||
| 9542 | {0x3400000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3400010}, | ||
| 9543 | {0x3400000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3400010}, | ||
| 9544 | {0x3400000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3400010}, | ||
| 9545 | {0x3400000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 9546 | {0x3400000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 9547 | {0x3400000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 9548 | {0x3400000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9549 | {0x3400000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9550 | {0x3400000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9551 | {0x3400000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9552 | {0x3400000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9553 | {0x3400000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9554 | {0x3400000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9555 | {0x3400000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a13, 0x3400010}, | ||
| 9556 | {0x3400000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3400000}, | ||
| 9557 | {0x3400000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 9558 | {0x3400000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3400010}, | ||
| 9559 | {0x3400000, 0xe6ff1a14, 0x9503366, 0xe6ff1a13, 0x3400010}, | ||
| 9560 | {0x3400000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3400010}, | ||
| 9561 | {0x3400000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3400000}, | ||
| 9562 | {0x3400000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 9563 | {0x3400000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3400010}, | ||
| 9564 | {0x3400000, 0xe6ff1a14, 0x966320b, 0xe6ff1a13, 0x3400010}, | ||
| 9565 | {0x3400000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3400010}, | ||
| 9566 | {0x3400000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3400010}, | ||
| 9567 | {0x3400000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a13, 0x3400010}, | ||
| 9568 | {0x3400000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a13, 0x3400010}, | ||
| 9569 | {0x3400000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a13, 0x3400010}, | ||
| 9570 | {0x3400000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 9571 | {0x3400000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3400000}, | ||
| 9572 | {0x3400000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3400080}, | ||
| 9573 | {0x3400000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3400080}, | ||
| 9574 | {0x3400000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3400080}, | ||
| 9575 | {0x3400000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3400080}, | ||
| 9576 | {0x3400000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3400080}, | ||
| 9577 | {0x3400000, 0x77f31e2f, 0x800000, 0x77f31e30, 0x3400010}, | ||
| 9578 | {0x3400000, 0x77f31e2f, 0x800002, 0x77f31e30, 0x3400010}, | ||
| 9579 | {0x3400000, 0x77f31e2f, 0x1398437, 0x77f31e30, 0x3400010}, | ||
| 9580 | {0x3400000, 0x77f31e2f, 0xba98d27, 0x77f31e30, 0x3400010}, | ||
| 9581 | {0x3400000, 0x77f31e2f, 0xba98d7a, 0x77f31e30, 0x3400010}, | ||
| 9582 | {0x3400000, 0x77f31e2f, 0x751f853a, 0x77f81a59, 0x3400010}, | ||
| 9583 | {0x3400000, 0x77f31e2f, 0x7f7ffff0, 0x7f800000, 0x3400014}, | ||
| 9584 | {0x3400000, 0x77f31e2f, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9585 | {0x3400000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9586 | {0x3400000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9587 | {0x3400000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9588 | {0x3400000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9589 | {0x3400000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9590 | {0x3400000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9591 | {0x3400000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9592 | {0x3400000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3400000}, | ||
| 9593 | {0x3400000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3400080}, | ||
| 9594 | {0x3400000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3400080}, | ||
| 9595 | {0x3400000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3400080}, | ||
| 9596 | {0x3400000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3400080}, | ||
| 9597 | {0x3400000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3400080}, | ||
| 9598 | {0x3400000, 0x77f31e2f, 0x80800000, 0x77f31e2f, 0x3400010}, | ||
| 9599 | {0x3400000, 0x77f31e2f, 0x80800002, 0x77f31e2f, 0x3400010}, | ||
| 9600 | {0x3400000, 0x77f31e2f, 0x81398437, 0x77f31e2f, 0x3400010}, | ||
| 9601 | {0x3400000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2f, 0x3400010}, | ||
| 9602 | {0x3400000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2f, 0x3400010}, | ||
| 9603 | {0x3400000, 0x77f31e2f, 0xf51f853a, 0x77ee2206, 0x3400010}, | ||
| 9604 | {0x3400000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe09, 0x3400010}, | ||
| 9605 | {0x3400000, 0x77f31e2f, 0xff7fffff, 0xff7ffe18, 0x3400010}, | ||
| 9606 | {0x3400000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9607 | {0x3400000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9608 | {0x3400000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9609 | {0x3400000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9610 | {0x3400000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9611 | {0x3400000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9612 | {0x3400000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9613 | {0x3400000, 0x77f31e2f, 0x4f3495cb, 0x77f31e30, 0x3400010}, | ||
| 9614 | {0x3400000, 0x77f31e2f, 0xe73a5134, 0x77f31e2f, 0x3400010}, | ||
| 9615 | {0x3400000, 0x77f31e2f, 0x7c994e9e, 0x7c998b66, 0x3400010}, | ||
| 9616 | {0x3400000, 0x77f31e2f, 0x6164bd6c, 0x77f31e30, 0x3400010}, | ||
| 9617 | {0x3400000, 0x77f31e2f, 0x9503366, 0x77f31e30, 0x3400010}, | ||
| 9618 | {0x3400000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2f, 0x3400010}, | ||
| 9619 | {0x3400000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2f, 0x3400010}, | ||
| 9620 | {0x3400000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3400000}, | ||
| 9621 | {0x3400000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2f, 0x3400010}, | ||
| 9622 | {0x3400000, 0x77f31e2f, 0x966320b, 0x77f31e30, 0x3400010}, | ||
| 9623 | {0x3400000, 0x77f31e2f, 0xb26bddee, 0x77f31e2f, 0x3400010}, | ||
| 9624 | {0x3400000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2f, 0x3400010}, | ||
| 9625 | {0x3400000, 0x77f31e2f, 0x317285d3, 0x77f31e30, 0x3400010}, | ||
| 9626 | {0x3400000, 0x77f31e2f, 0x3c9623b1, 0x77f31e30, 0x3400010}, | ||
| 9627 | {0x3400000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e30, 0x3400010}, | ||
| 9628 | {0x3400000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8b, 0x3400010}, | ||
| 9629 | {0x3400000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3400000}, | ||
| 9630 | {0x3400000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3400080}, | ||
| 9631 | {0x3400000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3400080}, | ||
| 9632 | {0x3400000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3400080}, | ||
| 9633 | {0x3400000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3400080}, | ||
| 9634 | {0x3400000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3400080}, | ||
| 9635 | {0x3400000, 0xaab4d7d8, 0x800000, 0xaab4d7d7, 0x3400010}, | ||
| 9636 | {0x3400000, 0xaab4d7d8, 0x800002, 0xaab4d7d7, 0x3400010}, | ||
| 9637 | {0x3400000, 0xaab4d7d8, 0x1398437, 0xaab4d7d7, 0x3400010}, | ||
| 9638 | {0x3400000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d7, 0x3400010}, | ||
| 9639 | {0x3400000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d7, 0x3400010}, | ||
| 9640 | {0x3400000, 0xaab4d7d8, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 9641 | {0x3400000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 9642 | {0x3400000, 0xaab4d7d8, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 9643 | {0x3400000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9644 | {0x3400000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9645 | {0x3400000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9646 | {0x3400000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9647 | {0x3400000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9648 | {0x3400000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9649 | {0x3400000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9650 | {0x3400000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3400000}, | ||
| 9651 | {0x3400000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3400080}, | ||
| 9652 | {0x3400000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3400080}, | ||
| 9653 | {0x3400000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3400080}, | ||
| 9654 | {0x3400000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3400080}, | ||
| 9655 | {0x3400000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3400080}, | ||
| 9656 | {0x3400000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3400010}, | ||
| 9657 | {0x3400000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3400010}, | ||
| 9658 | {0x3400000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3400010}, | ||
| 9659 | {0x3400000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3400010}, | ||
| 9660 | {0x3400000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3400010}, | ||
| 9661 | {0x3400000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 9662 | {0x3400000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 9663 | {0x3400000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 9664 | {0x3400000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9665 | {0x3400000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9666 | {0x3400000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9667 | {0x3400000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9668 | {0x3400000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9669 | {0x3400000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9670 | {0x3400000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9671 | {0x3400000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 9672 | {0x3400000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 9673 | {0x3400000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 9674 | {0x3400000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 9675 | {0x3400000, 0xaab4d7d8, 0x9503366, 0xaab4d7d7, 0x3400010}, | ||
| 9676 | {0x3400000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, | ||
| 9677 | {0x3400000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 9678 | {0x3400000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 9679 | {0x3400000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3400000}, | ||
| 9680 | {0x3400000, 0xaab4d7d8, 0x966320b, 0xaab4d7d7, 0x3400010}, | ||
| 9681 | {0x3400000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf57, 0x3400010}, | ||
| 9682 | {0x3400000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d5, 0x3400010}, | ||
| 9683 | {0x3400000, 0xaab4d7d8, 0x317285d3, 0x3172802d, 0x3400010}, | ||
| 9684 | {0x3400000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b1, 0x3400010}, | ||
| 9685 | {0x3400000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 9686 | {0x3400000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 9687 | {0x3400000, 0x966320b, 0x0, 0x966320b, 0x3400000}, | ||
| 9688 | {0x3400000, 0x966320b, 0x1, 0x966320b, 0x3400080}, | ||
| 9689 | {0x3400000, 0x966320b, 0x76, 0x966320b, 0x3400080}, | ||
| 9690 | {0x3400000, 0x966320b, 0x2b94, 0x966320b, 0x3400080}, | ||
| 9691 | {0x3400000, 0x966320b, 0x636d24, 0x966320b, 0x3400080}, | ||
| 9692 | {0x3400000, 0x966320b, 0x7fffff, 0x966320b, 0x3400080}, | ||
| 9693 | {0x3400000, 0x966320b, 0x800000, 0x966324b, 0x3400000}, | ||
| 9694 | {0x3400000, 0x966320b, 0x800002, 0x966324c, 0x3400010}, | ||
| 9695 | {0x3400000, 0x966320b, 0x1398437, 0x96632c5, 0x3400010}, | ||
| 9696 | {0x3400000, 0x966320b, 0xba98d27, 0xbb0beb8, 0x3400010}, | ||
| 9697 | {0x3400000, 0x966320b, 0xba98d7a, 0xbb0bf0b, 0x3400010}, | ||
| 9698 | {0x3400000, 0x966320b, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 9699 | {0x3400000, 0x966320b, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 9700 | {0x3400000, 0x966320b, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9701 | {0x3400000, 0x966320b, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9702 | {0x3400000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9703 | {0x3400000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9704 | {0x3400000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9705 | {0x3400000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9706 | {0x3400000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9707 | {0x3400000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9708 | {0x3400000, 0x966320b, 0x80000000, 0x966320b, 0x3400000}, | ||
| 9709 | {0x3400000, 0x966320b, 0x80000001, 0x966320b, 0x3400080}, | ||
| 9710 | {0x3400000, 0x966320b, 0x80000076, 0x966320b, 0x3400080}, | ||
| 9711 | {0x3400000, 0x966320b, 0x80002b94, 0x966320b, 0x3400080}, | ||
| 9712 | {0x3400000, 0x966320b, 0x80636d24, 0x966320b, 0x3400080}, | ||
| 9713 | {0x3400000, 0x966320b, 0x807fffff, 0x966320b, 0x3400080}, | ||
| 9714 | {0x3400000, 0x966320b, 0x80800000, 0x96631cb, 0x3400000}, | ||
| 9715 | {0x3400000, 0x966320b, 0x80800002, 0x96631cb, 0x3400010}, | ||
| 9716 | {0x3400000, 0x966320b, 0x81398437, 0x9663152, 0x3400010}, | ||
| 9717 | {0x3400000, 0x966320b, 0x8ba98d27, 0x8ba25b96, 0x3400010}, | ||
| 9718 | {0x3400000, 0x966320b, 0x8ba98d7a, 0x8ba25be9, 0x3400010}, | ||
| 9719 | {0x3400000, 0x966320b, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 9720 | {0x3400000, 0x966320b, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 9721 | {0x3400000, 0x966320b, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 9722 | {0x3400000, 0x966320b, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9723 | {0x3400000, 0x966320b, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9724 | {0x3400000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9725 | {0x3400000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9726 | {0x3400000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9727 | {0x3400000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9728 | {0x3400000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9729 | {0x3400000, 0x966320b, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 9730 | {0x3400000, 0x966320b, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 9731 | {0x3400000, 0x966320b, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 9732 | {0x3400000, 0x966320b, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 9733 | {0x3400000, 0x966320b, 0x9503366, 0x9db32b9, 0x3400010}, | ||
| 9734 | {0x3400000, 0x966320b, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, | ||
| 9735 | {0x3400000, 0x966320b, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 9736 | {0x3400000, 0x966320b, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 9737 | {0x3400000, 0x966320b, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, | ||
| 9738 | {0x3400000, 0x966320b, 0x966320b, 0x9e6320b, 0x3400000}, | ||
| 9739 | {0x3400000, 0x966320b, 0xb26bddee, 0xb26bdded, 0x3400010}, | ||
| 9740 | {0x3400000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, | ||
| 9741 | {0x3400000, 0x966320b, 0x317285d3, 0x317285d4, 0x3400010}, | ||
| 9742 | {0x3400000, 0x966320b, 0x3c9623b1, 0x3c9623b2, 0x3400010}, | ||
| 9743 | {0x3400000, 0x966320b, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 9744 | {0x3400000, 0x966320b, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 9745 | {0x3400000, 0xb26bddee, 0x0, 0xb26bddee, 0x3400000}, | ||
| 9746 | {0x3400000, 0xb26bddee, 0x1, 0xb26bddee, 0x3400080}, | ||
| 9747 | {0x3400000, 0xb26bddee, 0x76, 0xb26bddee, 0x3400080}, | ||
| 9748 | {0x3400000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3400080}, | ||
| 9749 | {0x3400000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3400080}, | ||
| 9750 | {0x3400000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3400080}, | ||
| 9751 | {0x3400000, 0xb26bddee, 0x800000, 0xb26bdded, 0x3400010}, | ||
| 9752 | {0x3400000, 0xb26bddee, 0x800002, 0xb26bdded, 0x3400010}, | ||
| 9753 | {0x3400000, 0xb26bddee, 0x1398437, 0xb26bdded, 0x3400010}, | ||
| 9754 | {0x3400000, 0xb26bddee, 0xba98d27, 0xb26bdded, 0x3400010}, | ||
| 9755 | {0x3400000, 0xb26bddee, 0xba98d7a, 0xb26bdded, 0x3400010}, | ||
| 9756 | {0x3400000, 0xb26bddee, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 9757 | {0x3400000, 0xb26bddee, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 9758 | {0x3400000, 0xb26bddee, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 9759 | {0x3400000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9760 | {0x3400000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9761 | {0x3400000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9762 | {0x3400000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9763 | {0x3400000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9764 | {0x3400000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9765 | {0x3400000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9766 | {0x3400000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3400000}, | ||
| 9767 | {0x3400000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3400080}, | ||
| 9768 | {0x3400000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3400080}, | ||
| 9769 | {0x3400000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3400080}, | ||
| 9770 | {0x3400000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3400080}, | ||
| 9771 | {0x3400000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3400080}, | ||
| 9772 | {0x3400000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3400010}, | ||
| 9773 | {0x3400000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3400010}, | ||
| 9774 | {0x3400000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3400010}, | ||
| 9775 | {0x3400000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3400010}, | ||
| 9776 | {0x3400000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3400010}, | ||
| 9777 | {0x3400000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 9778 | {0x3400000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 9779 | {0x3400000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 9780 | {0x3400000, 0xb26bddee, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9781 | {0x3400000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9782 | {0x3400000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9783 | {0x3400000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9784 | {0x3400000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9785 | {0x3400000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9786 | {0x3400000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9787 | {0x3400000, 0xb26bddee, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 9788 | {0x3400000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 9789 | {0x3400000, 0xb26bddee, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 9790 | {0x3400000, 0xb26bddee, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 9791 | {0x3400000, 0xb26bddee, 0x9503366, 0xb26bdded, 0x3400010}, | ||
| 9792 | {0x3400000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, | ||
| 9793 | {0x3400000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 9794 | {0x3400000, 0xb26bddee, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 9795 | {0x3400000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf57, 0x3400010}, | ||
| 9796 | {0x3400000, 0xb26bddee, 0x966320b, 0xb26bdded, 0x3400010}, | ||
| 9797 | {0x3400000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3400000}, | ||
| 9798 | {0x3400000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8e, 0x3400010}, | ||
| 9799 | {0x3400000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3400010}, | ||
| 9800 | {0x3400000, 0xb26bddee, 0x3c9623b1, 0x3c9623aa, 0x3400010}, | ||
| 9801 | {0x3400000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 9802 | {0x3400000, 0xb26bddee, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 9803 | {0x3400000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3400000}, | ||
| 9804 | {0x3400000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3400080}, | ||
| 9805 | {0x3400000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3400080}, | ||
| 9806 | {0x3400000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3400080}, | ||
| 9807 | {0x3400000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3400080}, | ||
| 9808 | {0x3400000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3400080}, | ||
| 9809 | {0x3400000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d2, 0x3400010}, | ||
| 9810 | {0x3400000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d2, 0x3400010}, | ||
| 9811 | {0x3400000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d2, 0x3400010}, | ||
| 9812 | {0x3400000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d2, 0x3400010}, | ||
| 9813 | {0x3400000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d2, 0x3400010}, | ||
| 9814 | {0x3400000, 0xb5c8e5d3, 0x751f853a, 0x751f853a, 0x3400010}, | ||
| 9815 | {0x3400000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, | ||
| 9816 | {0x3400000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7fffff, 0x3400010}, | ||
| 9817 | {0x3400000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9818 | {0x3400000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9819 | {0x3400000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9820 | {0x3400000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9821 | {0x3400000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9822 | {0x3400000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9823 | {0x3400000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9824 | {0x3400000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3400000}, | ||
| 9825 | {0x3400000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3400080}, | ||
| 9826 | {0x3400000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3400080}, | ||
| 9827 | {0x3400000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3400080}, | ||
| 9828 | {0x3400000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3400080}, | ||
| 9829 | {0x3400000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3400080}, | ||
| 9830 | {0x3400000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3400010}, | ||
| 9831 | {0x3400000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3400010}, | ||
| 9832 | {0x3400000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3400010}, | ||
| 9833 | {0x3400000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3400010}, | ||
| 9834 | {0x3400000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3400010}, | ||
| 9835 | {0x3400000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3400010}, | ||
| 9836 | {0x3400000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3400010}, | ||
| 9837 | {0x3400000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3400010}, | ||
| 9838 | {0x3400000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9839 | {0x3400000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9840 | {0x3400000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9841 | {0x3400000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9842 | {0x3400000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9843 | {0x3400000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9844 | {0x3400000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9845 | {0x3400000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495cb, 0x3400010}, | ||
| 9846 | {0x3400000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3400010}, | ||
| 9847 | {0x3400000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9e, 0x3400010}, | ||
| 9848 | {0x3400000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6c, 0x3400010}, | ||
| 9849 | {0x3400000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d2, 0x3400010}, | ||
| 9850 | {0x3400000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3400010}, | ||
| 9851 | {0x3400000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, | ||
| 9852 | {0x3400000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2f, 0x3400010}, | ||
| 9853 | {0x3400000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d5, 0x3400010}, | ||
| 9854 | {0x3400000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d2, 0x3400010}, | ||
| 9855 | {0x3400000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8e, 0x3400010}, | ||
| 9856 | {0x3400000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3400000}, | ||
| 9857 | {0x3400000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3400010}, | ||
| 9858 | {0x3400000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208e, 0x3400010}, | ||
| 9859 | {0x3400000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, | ||
| 9860 | {0x3400000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6c, 0x3400010}, | ||
| 9861 | {0x3400000, 0x317285d3, 0x0, 0x317285d3, 0x3400000}, | ||
| 9862 | {0x3400000, 0x317285d3, 0x1, 0x317285d3, 0x3400080}, | ||
| 9863 | {0x3400000, 0x317285d3, 0x76, 0x317285d3, 0x3400080}, | ||
| 9864 | {0x3400000, 0x317285d3, 0x2b94, 0x317285d3, 0x3400080}, | ||
| 9865 | {0x3400000, 0x317285d3, 0x636d24, 0x317285d3, 0x3400080}, | ||
| 9866 | {0x3400000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3400080}, | ||
| 9867 | {0x3400000, 0x317285d3, 0x800000, 0x317285d4, 0x3400010}, | ||
| 9868 | {0x3400000, 0x317285d3, 0x800002, 0x317285d4, 0x3400010}, | ||
| 9869 | {0x3400000, 0x317285d3, 0x1398437, 0x317285d4, 0x3400010}, | ||
| 9870 | {0x3400000, 0x317285d3, 0xba98d27, 0x317285d4, 0x3400010}, | ||
| 9871 | {0x3400000, 0x317285d3, 0xba98d7a, 0x317285d4, 0x3400010}, | ||
| 9872 | {0x3400000, 0x317285d3, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 9873 | {0x3400000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 9874 | {0x3400000, 0x317285d3, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9875 | {0x3400000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9876 | {0x3400000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9877 | {0x3400000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9878 | {0x3400000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9879 | {0x3400000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9880 | {0x3400000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9881 | {0x3400000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9882 | {0x3400000, 0x317285d3, 0x80000000, 0x317285d3, 0x3400000}, | ||
| 9883 | {0x3400000, 0x317285d3, 0x80000001, 0x317285d3, 0x3400080}, | ||
| 9884 | {0x3400000, 0x317285d3, 0x80000076, 0x317285d3, 0x3400080}, | ||
| 9885 | {0x3400000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3400080}, | ||
| 9886 | {0x3400000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3400080}, | ||
| 9887 | {0x3400000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3400080}, | ||
| 9888 | {0x3400000, 0x317285d3, 0x80800000, 0x317285d3, 0x3400010}, | ||
| 9889 | {0x3400000, 0x317285d3, 0x80800002, 0x317285d3, 0x3400010}, | ||
| 9890 | {0x3400000, 0x317285d3, 0x81398437, 0x317285d3, 0x3400010}, | ||
| 9891 | {0x3400000, 0x317285d3, 0x8ba98d27, 0x317285d3, 0x3400010}, | ||
| 9892 | {0x3400000, 0x317285d3, 0x8ba98d7a, 0x317285d3, 0x3400010}, | ||
| 9893 | {0x3400000, 0x317285d3, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 9894 | {0x3400000, 0x317285d3, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 9895 | {0x3400000, 0x317285d3, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 9896 | {0x3400000, 0x317285d3, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9897 | {0x3400000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9898 | {0x3400000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9899 | {0x3400000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9900 | {0x3400000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9901 | {0x3400000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9902 | {0x3400000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9903 | {0x3400000, 0x317285d3, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 9904 | {0x3400000, 0x317285d3, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 9905 | {0x3400000, 0x317285d3, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 9906 | {0x3400000, 0x317285d3, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 9907 | {0x3400000, 0x317285d3, 0x9503366, 0x317285d4, 0x3400010}, | ||
| 9908 | {0x3400000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, | ||
| 9909 | {0x3400000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 9910 | {0x3400000, 0x317285d3, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 9911 | {0x3400000, 0x317285d3, 0xaab4d7d8, 0x3172802d, 0x3400010}, | ||
| 9912 | {0x3400000, 0x317285d3, 0x966320b, 0x317285d4, 0x3400010}, | ||
| 9913 | {0x3400000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3400010}, | ||
| 9914 | {0x3400000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3400010}, | ||
| 9915 | {0x3400000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3400000}, | ||
| 9916 | {0x3400000, 0x317285d3, 0x3c9623b1, 0x3c9623b3, 0x3400010}, | ||
| 9917 | {0x3400000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 9918 | {0x3400000, 0x317285d3, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 9919 | {0x3400000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3400000}, | ||
| 9920 | {0x3400000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3400080}, | ||
| 9921 | {0x3400000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3400080}, | ||
| 9922 | {0x3400000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3400080}, | ||
| 9923 | {0x3400000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3400080}, | ||
| 9924 | {0x3400000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3400080}, | ||
| 9925 | {0x3400000, 0x3c9623b1, 0x800000, 0x3c9623b2, 0x3400010}, | ||
| 9926 | {0x3400000, 0x3c9623b1, 0x800002, 0x3c9623b2, 0x3400010}, | ||
| 9927 | {0x3400000, 0x3c9623b1, 0x1398437, 0x3c9623b2, 0x3400010}, | ||
| 9928 | {0x3400000, 0x3c9623b1, 0xba98d27, 0x3c9623b2, 0x3400010}, | ||
| 9929 | {0x3400000, 0x3c9623b1, 0xba98d7a, 0x3c9623b2, 0x3400010}, | ||
| 9930 | {0x3400000, 0x3c9623b1, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 9931 | {0x3400000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 9932 | {0x3400000, 0x3c9623b1, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9933 | {0x3400000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9934 | {0x3400000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9935 | {0x3400000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9936 | {0x3400000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9937 | {0x3400000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9938 | {0x3400000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9939 | {0x3400000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9940 | {0x3400000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3400000}, | ||
| 9941 | {0x3400000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3400080}, | ||
| 9942 | {0x3400000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3400080}, | ||
| 9943 | {0x3400000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3400080}, | ||
| 9944 | {0x3400000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3400080}, | ||
| 9945 | {0x3400000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3400080}, | ||
| 9946 | {0x3400000, 0x3c9623b1, 0x80800000, 0x3c9623b1, 0x3400010}, | ||
| 9947 | {0x3400000, 0x3c9623b1, 0x80800002, 0x3c9623b1, 0x3400010}, | ||
| 9948 | {0x3400000, 0x3c9623b1, 0x81398437, 0x3c9623b1, 0x3400010}, | ||
| 9949 | {0x3400000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b1, 0x3400010}, | ||
| 9950 | {0x3400000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b1, 0x3400010}, | ||
| 9951 | {0x3400000, 0x3c9623b1, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 9952 | {0x3400000, 0x3c9623b1, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 9953 | {0x3400000, 0x3c9623b1, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 9954 | {0x3400000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3400000}, | ||
| 9955 | {0x3400000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 9956 | {0x3400000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 9957 | {0x3400000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 9958 | {0x3400000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 9959 | {0x3400000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9960 | {0x3400000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 9961 | {0x3400000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cc, 0x3400010}, | ||
| 9962 | {0x3400000, 0x3c9623b1, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 9963 | {0x3400000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 9964 | {0x3400000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 9965 | {0x3400000, 0x3c9623b1, 0x9503366, 0x3c9623b2, 0x3400010}, | ||
| 9966 | {0x3400000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3400010}, | ||
| 9967 | {0x3400000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 9968 | {0x3400000, 0x3c9623b1, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 9969 | {0x3400000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b1, 0x3400010}, | ||
| 9970 | {0x3400000, 0x3c9623b1, 0x966320b, 0x3c9623b2, 0x3400010}, | ||
| 9971 | {0x3400000, 0x3c9623b1, 0xb26bddee, 0x3c9623aa, 0x3400010}, | ||
| 9972 | {0x3400000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208e, 0x3400010}, | ||
| 9973 | {0x3400000, 0x3c9623b1, 0x317285d3, 0x3c9623b3, 0x3400010}, | ||
| 9974 | {0x3400000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3400000}, | ||
| 9975 | {0x3400000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, | ||
| 9976 | {0x3400000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 9977 | {0x3400000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3400000}, | ||
| 9978 | {0x3400000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3400080}, | ||
| 9979 | {0x3400000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3400080}, | ||
| 9980 | {0x3400000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3400080}, | ||
| 9981 | {0x3400000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3400080}, | ||
| 9982 | {0x3400000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3400080}, | ||
| 9983 | {0x3400000, 0x51fd2c7c, 0x800000, 0x51fd2c7d, 0x3400010}, | ||
| 9984 | {0x3400000, 0x51fd2c7c, 0x800002, 0x51fd2c7d, 0x3400010}, | ||
| 9985 | {0x3400000, 0x51fd2c7c, 0x1398437, 0x51fd2c7d, 0x3400010}, | ||
| 9986 | {0x3400000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7d, 0x3400010}, | ||
| 9987 | {0x3400000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7d, 0x3400010}, | ||
| 9988 | {0x3400000, 0x51fd2c7c, 0x751f853a, 0x751f853b, 0x3400010}, | ||
| 9989 | {0x3400000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, | ||
| 9990 | {0x3400000, 0x51fd2c7c, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 9991 | {0x3400000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 9992 | {0x3400000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 9993 | {0x3400000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 9994 | {0x3400000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 9995 | {0x3400000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 9996 | {0x3400000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 9997 | {0x3400000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 9998 | {0x3400000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3400000}, | ||
| 9999 | {0x3400000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3400080}, | ||
| 10000 | {0x3400000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3400080}, | ||
| 10001 | {0x3400000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3400080}, | ||
| 10002 | {0x3400000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3400080}, | ||
| 10003 | {0x3400000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3400080}, | ||
| 10004 | {0x3400000, 0x51fd2c7c, 0x80800000, 0x51fd2c7c, 0x3400010}, | ||
| 10005 | {0x3400000, 0x51fd2c7c, 0x80800002, 0x51fd2c7c, 0x3400010}, | ||
| 10006 | {0x3400000, 0x51fd2c7c, 0x81398437, 0x51fd2c7c, 0x3400010}, | ||
| 10007 | {0x3400000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7c, 0x3400010}, | ||
| 10008 | {0x3400000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7c, 0x3400010}, | ||
| 10009 | {0x3400000, 0x51fd2c7c, 0xf51f853a, 0xf51f8539, 0x3400010}, | ||
| 10010 | {0x3400000, 0x51fd2c7c, 0xff7ffff0, 0xff7fffef, 0x3400010}, | ||
| 10011 | {0x3400000, 0x51fd2c7c, 0xff7fffff, 0xff7ffffe, 0x3400010}, | ||
| 10012 | {0x3400000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3400000}, | ||
| 10013 | {0x3400000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 10014 | {0x3400000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 10015 | {0x3400000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 10016 | {0x3400000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 10017 | {0x3400000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 10018 | {0x3400000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 10019 | {0x3400000, 0x51fd2c7c, 0x4f3495cb, 0x52016896, 0x3400010}, | ||
| 10020 | {0x3400000, 0x51fd2c7c, 0xe73a5134, 0xe73a5133, 0x3400010}, | ||
| 10021 | {0x3400000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9f, 0x3400010}, | ||
| 10022 | {0x3400000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6d, 0x3400010}, | ||
| 10023 | {0x3400000, 0x51fd2c7c, 0x9503366, 0x51fd2c7d, 0x3400010}, | ||
| 10024 | {0x3400000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7c, 0x3400010}, | ||
| 10025 | {0x3400000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, | ||
| 10026 | {0x3400000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e30, 0x3400010}, | ||
| 10027 | {0x3400000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7c, 0x3400010}, | ||
| 10028 | {0x3400000, 0x51fd2c7c, 0x966320b, 0x51fd2c7d, 0x3400010}, | ||
| 10029 | {0x3400000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7c, 0x3400010}, | ||
| 10030 | {0x3400000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7c, 0x3400010}, | ||
| 10031 | {0x3400000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7d, 0x3400010}, | ||
| 10032 | {0x3400000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7d, 0x3400010}, | ||
| 10033 | {0x3400000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3400000}, | ||
| 10034 | {0x3400000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6d, 0x3400010}, | ||
| 10035 | {0x3400000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3400000}, | ||
| 10036 | {0x3400000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3400080}, | ||
| 10037 | {0x3400000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3400080}, | ||
| 10038 | {0x3400000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3400080}, | ||
| 10039 | {0x3400000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3400080}, | ||
| 10040 | {0x3400000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3400080}, | ||
| 10041 | {0x3400000, 0x7b906a6c, 0x800000, 0x7b906a6d, 0x3400010}, | ||
| 10042 | {0x3400000, 0x7b906a6c, 0x800002, 0x7b906a6d, 0x3400010}, | ||
| 10043 | {0x3400000, 0x7b906a6c, 0x1398437, 0x7b906a6d, 0x3400010}, | ||
| 10044 | {0x3400000, 0x7b906a6c, 0xba98d27, 0x7b906a6d, 0x3400010}, | ||
| 10045 | {0x3400000, 0x7b906a6c, 0xba98d7a, 0x7b906a6d, 0x3400010}, | ||
| 10046 | {0x3400000, 0x7b906a6c, 0x751f853a, 0x7b906f69, 0x3400010}, | ||
| 10047 | {0x3400000, 0x7b906a6c, 0x7f7ffff0, 0x7f800000, 0x3400014}, | ||
| 10048 | {0x3400000, 0x7b906a6c, 0x7f7fffff, 0x7f800000, 0x3400014}, | ||
| 10049 | {0x3400000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3400000}, | ||
| 10050 | {0x3400000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3400001}, | ||
| 10051 | {0x3400000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3400001}, | ||
| 10052 | {0x3400000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3400001}, | ||
| 10053 | {0x3400000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3400000}, | ||
| 10054 | {0x3400000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3400000}, | ||
| 10055 | {0x3400000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3400000}, | ||
| 10056 | {0x3400000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3400000}, | ||
| 10057 | {0x3400000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3400080}, | ||
| 10058 | {0x3400000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3400080}, | ||
| 10059 | {0x3400000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3400080}, | ||
| 10060 | {0x3400000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3400080}, | ||
| 10061 | {0x3400000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3400080}, | ||
| 10062 | {0x3400000, 0x7b906a6c, 0x80800000, 0x7b906a6c, 0x3400010}, | ||
| 10063 | {0x3400000, 0x7b906a6c, 0x80800002, 0x7b906a6c, 0x3400010}, | ||
| 10064 | {0x3400000, 0x7b906a6c, 0x81398437, 0x7b906a6c, 0x3400010}, | ||
| 10065 | {0x3400000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6c, 0x3400010}, | ||
| 10066 | {0x3400000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6c, 0x3400010}, | ||
| 10067 | {0x3400000, 0x7b906a6c, 0xf51f853a, 0x7b906570, 0x3400010}, | ||
| 10068 | {0x3400000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3400010}, | ||
| 10069 | {0x3400000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3400010}, | ||
| 10070 | {0x3400000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3400000}, | ||
| 10071 | {0x3400000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3400001}, | ||
| 10072 | {0x3400000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3400001}, | ||
| 10073 | {0x3400000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3400001}, | ||
| 10074 | {0x3400000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3400000}, | ||
| 10075 | {0x3400000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3400000}, | ||
| 10076 | {0x3400000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3400000}, | ||
| 10077 | {0x3400000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6d, 0x3400010}, | ||
| 10078 | {0x3400000, 0x7b906a6c, 0xe73a5134, 0x7b906a6c, 0x3400010}, | ||
| 10079 | {0x3400000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3400000}, | ||
| 10080 | {0x3400000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6d, 0x3400010}, | ||
| 10081 | {0x3400000, 0x7b906a6c, 0x9503366, 0x7b906a6d, 0x3400010}, | ||
| 10082 | {0x3400000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6c, 0x3400010}, | ||
| 10083 | {0x3400000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6c, 0x3400010}, | ||
| 10084 | {0x3400000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8b, 0x3400010}, | ||
| 10085 | {0x3400000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6c, 0x3400010}, | ||
| 10086 | {0x3400000, 0x7b906a6c, 0x966320b, 0x7b906a6d, 0x3400010}, | ||
| 10087 | {0x3400000, 0x7b906a6c, 0xb26bddee, 0x7b906a6c, 0x3400010}, | ||
| 10088 | {0x3400000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6c, 0x3400010}, | ||
| 10089 | {0x3400000, 0x7b906a6c, 0x317285d3, 0x7b906a6d, 0x3400010}, | ||
| 10090 | {0x3400000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6d, 0x3400010}, | ||
| 10091 | {0x3400000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6d, 0x3400010}, | ||
| 10092 | {0x3400000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3400000}, | ||
| 10093 | {0x3000000, 0x0, 0x0, 0x0, 0x3000000}, | ||
| 10094 | {0x3000000, 0x0, 0x1, 0x0, 0x3000080}, | ||
| 10095 | {0x3000000, 0x0, 0x76, 0x0, 0x3000080}, | ||
| 10096 | {0x3000000, 0x0, 0x2b94, 0x0, 0x3000080}, | ||
| 10097 | {0x3000000, 0x0, 0x636d24, 0x0, 0x3000080}, | ||
| 10098 | {0x3000000, 0x0, 0x7fffff, 0x0, 0x3000080}, | ||
| 10099 | {0x3000000, 0x0, 0x800000, 0x800000, 0x3000000}, | ||
| 10100 | {0x3000000, 0x0, 0x800002, 0x800002, 0x3000000}, | ||
| 10101 | {0x3000000, 0x0, 0x1398437, 0x1398437, 0x3000000}, | ||
| 10102 | {0x3000000, 0x0, 0xba98d27, 0xba98d27, 0x3000000}, | ||
| 10103 | {0x3000000, 0x0, 0xba98d7a, 0xba98d7a, 0x3000000}, | ||
| 10104 | {0x3000000, 0x0, 0x751f853a, 0x751f853a, 0x3000000}, | ||
| 10105 | {0x3000000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3000000}, | ||
| 10106 | {0x3000000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3000000}, | ||
| 10107 | {0x3000000, 0x0, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10108 | {0x3000000, 0x0, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10109 | {0x3000000, 0x0, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10110 | {0x3000000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10111 | {0x3000000, 0x0, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10112 | {0x3000000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10113 | {0x3000000, 0x0, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10114 | {0x3000000, 0x0, 0x80000000, 0x0, 0x3000000}, | ||
| 10115 | {0x3000000, 0x0, 0x80000001, 0x0, 0x3000080}, | ||
| 10116 | {0x3000000, 0x0, 0x80000076, 0x0, 0x3000080}, | ||
| 10117 | {0x3000000, 0x0, 0x80002b94, 0x0, 0x3000080}, | ||
| 10118 | {0x3000000, 0x0, 0x80636d24, 0x0, 0x3000080}, | ||
| 10119 | {0x3000000, 0x0, 0x807fffff, 0x0, 0x3000080}, | ||
| 10120 | {0x3000000, 0x0, 0x80800000, 0x80800000, 0x3000000}, | ||
| 10121 | {0x3000000, 0x0, 0x80800002, 0x80800002, 0x3000000}, | ||
| 10122 | {0x3000000, 0x0, 0x81398437, 0x81398437, 0x3000000}, | ||
| 10123 | {0x3000000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3000000}, | ||
| 10124 | {0x3000000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3000000}, | ||
| 10125 | {0x3000000, 0x0, 0xf51f853a, 0xf51f853a, 0x3000000}, | ||
| 10126 | {0x3000000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3000000}, | ||
| 10127 | {0x3000000, 0x0, 0xff7fffff, 0xff7fffff, 0x3000000}, | ||
| 10128 | {0x3000000, 0x0, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10129 | {0x3000000, 0x0, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10130 | {0x3000000, 0x0, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10131 | {0x3000000, 0x0, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10132 | {0x3000000, 0x0, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10133 | {0x3000000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10134 | {0x3000000, 0x0, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10135 | {0x3000000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3000000}, | ||
| 10136 | {0x3000000, 0x0, 0xe73a5134, 0xe73a5134, 0x3000000}, | ||
| 10137 | {0x3000000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3000000}, | ||
| 10138 | {0x3000000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3000000}, | ||
| 10139 | {0x3000000, 0x0, 0x9503366, 0x9503366, 0x3000000}, | ||
| 10140 | {0x3000000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3000000}, | ||
| 10141 | {0x3000000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3000000}, | ||
| 10142 | {0x3000000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3000000}, | ||
| 10143 | {0x3000000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3000000}, | ||
| 10144 | {0x3000000, 0x0, 0x966320b, 0x966320b, 0x3000000}, | ||
| 10145 | {0x3000000, 0x0, 0xb26bddee, 0xb26bddee, 0x3000000}, | ||
| 10146 | {0x3000000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000000}, | ||
| 10147 | {0x3000000, 0x0, 0x317285d3, 0x317285d3, 0x3000000}, | ||
| 10148 | {0x3000000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3000000}, | ||
| 10149 | {0x3000000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3000000}, | ||
| 10150 | {0x3000000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3000000}, | ||
| 10151 | {0x3000000, 0x1, 0x0, 0x0, 0x3000080}, | ||
| 10152 | {0x3000000, 0x1, 0x1, 0x0, 0x3000080}, | ||
| 10153 | {0x3000000, 0x1, 0x76, 0x0, 0x3000080}, | ||
| 10154 | {0x3000000, 0x1, 0x2b94, 0x0, 0x3000080}, | ||
| 10155 | {0x3000000, 0x1, 0x636d24, 0x0, 0x3000080}, | ||
| 10156 | {0x3000000, 0x1, 0x7fffff, 0x0, 0x3000080}, | ||
| 10157 | {0x3000000, 0x1, 0x800000, 0x800000, 0x3000080}, | ||
| 10158 | {0x3000000, 0x1, 0x800002, 0x800002, 0x3000080}, | ||
| 10159 | {0x3000000, 0x1, 0x1398437, 0x1398437, 0x3000080}, | ||
| 10160 | {0x3000000, 0x1, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 10161 | {0x3000000, 0x1, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 10162 | {0x3000000, 0x1, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 10163 | {0x3000000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 10164 | {0x3000000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 10165 | {0x3000000, 0x1, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 10166 | {0x3000000, 0x1, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 10167 | {0x3000000, 0x1, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 10168 | {0x3000000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 10169 | {0x3000000, 0x1, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 10170 | {0x3000000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10171 | {0x3000000, 0x1, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 10172 | {0x3000000, 0x1, 0x80000000, 0x0, 0x3000080}, | ||
| 10173 | {0x3000000, 0x1, 0x80000001, 0x0, 0x3000080}, | ||
| 10174 | {0x3000000, 0x1, 0x80000076, 0x0, 0x3000080}, | ||
| 10175 | {0x3000000, 0x1, 0x80002b94, 0x0, 0x3000080}, | ||
| 10176 | {0x3000000, 0x1, 0x80636d24, 0x0, 0x3000080}, | ||
| 10177 | {0x3000000, 0x1, 0x807fffff, 0x0, 0x3000080}, | ||
| 10178 | {0x3000000, 0x1, 0x80800000, 0x80800000, 0x3000080}, | ||
| 10179 | {0x3000000, 0x1, 0x80800002, 0x80800002, 0x3000080}, | ||
| 10180 | {0x3000000, 0x1, 0x81398437, 0x81398437, 0x3000080}, | ||
| 10181 | {0x3000000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 10182 | {0x3000000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 10183 | {0x3000000, 0x1, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 10184 | {0x3000000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 10185 | {0x3000000, 0x1, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 10186 | {0x3000000, 0x1, 0xff800000, 0xff800000, 0x3000080}, | ||
| 10187 | {0x3000000, 0x1, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 10188 | {0x3000000, 0x1, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 10189 | {0x3000000, 0x1, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 10190 | {0x3000000, 0x1, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 10191 | {0x3000000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10192 | {0x3000000, 0x1, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 10193 | {0x3000000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 10194 | {0x3000000, 0x1, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 10195 | {0x3000000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 10196 | {0x3000000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 10197 | {0x3000000, 0x1, 0x9503366, 0x9503366, 0x3000080}, | ||
| 10198 | {0x3000000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 10199 | {0x3000000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 10200 | {0x3000000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 10201 | {0x3000000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 10202 | {0x3000000, 0x1, 0x966320b, 0x966320b, 0x3000080}, | ||
| 10203 | {0x3000000, 0x1, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 10204 | {0x3000000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 10205 | {0x3000000, 0x1, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 10206 | {0x3000000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 10207 | {0x3000000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 10208 | {0x3000000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 10209 | {0x3000000, 0x76, 0x0, 0x0, 0x3000080}, | ||
| 10210 | {0x3000000, 0x76, 0x1, 0x0, 0x3000080}, | ||
| 10211 | {0x3000000, 0x76, 0x76, 0x0, 0x3000080}, | ||
| 10212 | {0x3000000, 0x76, 0x2b94, 0x0, 0x3000080}, | ||
| 10213 | {0x3000000, 0x76, 0x636d24, 0x0, 0x3000080}, | ||
| 10214 | {0x3000000, 0x76, 0x7fffff, 0x0, 0x3000080}, | ||
| 10215 | {0x3000000, 0x76, 0x800000, 0x800000, 0x3000080}, | ||
| 10216 | {0x3000000, 0x76, 0x800002, 0x800002, 0x3000080}, | ||
| 10217 | {0x3000000, 0x76, 0x1398437, 0x1398437, 0x3000080}, | ||
| 10218 | {0x3000000, 0x76, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 10219 | {0x3000000, 0x76, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 10220 | {0x3000000, 0x76, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 10221 | {0x3000000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 10222 | {0x3000000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 10223 | {0x3000000, 0x76, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 10224 | {0x3000000, 0x76, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 10225 | {0x3000000, 0x76, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 10226 | {0x3000000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 10227 | {0x3000000, 0x76, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 10228 | {0x3000000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10229 | {0x3000000, 0x76, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 10230 | {0x3000000, 0x76, 0x80000000, 0x0, 0x3000080}, | ||
| 10231 | {0x3000000, 0x76, 0x80000001, 0x0, 0x3000080}, | ||
| 10232 | {0x3000000, 0x76, 0x80000076, 0x0, 0x3000080}, | ||
| 10233 | {0x3000000, 0x76, 0x80002b94, 0x0, 0x3000080}, | ||
| 10234 | {0x3000000, 0x76, 0x80636d24, 0x0, 0x3000080}, | ||
| 10235 | {0x3000000, 0x76, 0x807fffff, 0x0, 0x3000080}, | ||
| 10236 | {0x3000000, 0x76, 0x80800000, 0x80800000, 0x3000080}, | ||
| 10237 | {0x3000000, 0x76, 0x80800002, 0x80800002, 0x3000080}, | ||
| 10238 | {0x3000000, 0x76, 0x81398437, 0x81398437, 0x3000080}, | ||
| 10239 | {0x3000000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 10240 | {0x3000000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 10241 | {0x3000000, 0x76, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 10242 | {0x3000000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 10243 | {0x3000000, 0x76, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 10244 | {0x3000000, 0x76, 0xff800000, 0xff800000, 0x3000080}, | ||
| 10245 | {0x3000000, 0x76, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 10246 | {0x3000000, 0x76, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 10247 | {0x3000000, 0x76, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 10248 | {0x3000000, 0x76, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 10249 | {0x3000000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10250 | {0x3000000, 0x76, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 10251 | {0x3000000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 10252 | {0x3000000, 0x76, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 10253 | {0x3000000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 10254 | {0x3000000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 10255 | {0x3000000, 0x76, 0x9503366, 0x9503366, 0x3000080}, | ||
| 10256 | {0x3000000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 10257 | {0x3000000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 10258 | {0x3000000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 10259 | {0x3000000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 10260 | {0x3000000, 0x76, 0x966320b, 0x966320b, 0x3000080}, | ||
| 10261 | {0x3000000, 0x76, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 10262 | {0x3000000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 10263 | {0x3000000, 0x76, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 10264 | {0x3000000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 10265 | {0x3000000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 10266 | {0x3000000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 10267 | {0x3000000, 0x2b94, 0x0, 0x0, 0x3000080}, | ||
| 10268 | {0x3000000, 0x2b94, 0x1, 0x0, 0x3000080}, | ||
| 10269 | {0x3000000, 0x2b94, 0x76, 0x0, 0x3000080}, | ||
| 10270 | {0x3000000, 0x2b94, 0x2b94, 0x0, 0x3000080}, | ||
| 10271 | {0x3000000, 0x2b94, 0x636d24, 0x0, 0x3000080}, | ||
| 10272 | {0x3000000, 0x2b94, 0x7fffff, 0x0, 0x3000080}, | ||
| 10273 | {0x3000000, 0x2b94, 0x800000, 0x800000, 0x3000080}, | ||
| 10274 | {0x3000000, 0x2b94, 0x800002, 0x800002, 0x3000080}, | ||
| 10275 | {0x3000000, 0x2b94, 0x1398437, 0x1398437, 0x3000080}, | ||
| 10276 | {0x3000000, 0x2b94, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 10277 | {0x3000000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 10278 | {0x3000000, 0x2b94, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 10279 | {0x3000000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 10280 | {0x3000000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 10281 | {0x3000000, 0x2b94, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 10282 | {0x3000000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 10283 | {0x3000000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 10284 | {0x3000000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 10285 | {0x3000000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 10286 | {0x3000000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10287 | {0x3000000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 10288 | {0x3000000, 0x2b94, 0x80000000, 0x0, 0x3000080}, | ||
| 10289 | {0x3000000, 0x2b94, 0x80000001, 0x0, 0x3000080}, | ||
| 10290 | {0x3000000, 0x2b94, 0x80000076, 0x0, 0x3000080}, | ||
| 10291 | {0x3000000, 0x2b94, 0x80002b94, 0x0, 0x3000080}, | ||
| 10292 | {0x3000000, 0x2b94, 0x80636d24, 0x0, 0x3000080}, | ||
| 10293 | {0x3000000, 0x2b94, 0x807fffff, 0x0, 0x3000080}, | ||
| 10294 | {0x3000000, 0x2b94, 0x80800000, 0x80800000, 0x3000080}, | ||
| 10295 | {0x3000000, 0x2b94, 0x80800002, 0x80800002, 0x3000080}, | ||
| 10296 | {0x3000000, 0x2b94, 0x81398437, 0x81398437, 0x3000080}, | ||
| 10297 | {0x3000000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 10298 | {0x3000000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 10299 | {0x3000000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 10300 | {0x3000000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 10301 | {0x3000000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 10302 | {0x3000000, 0x2b94, 0xff800000, 0xff800000, 0x3000080}, | ||
| 10303 | {0x3000000, 0x2b94, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 10304 | {0x3000000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 10305 | {0x3000000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 10306 | {0x3000000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 10307 | {0x3000000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10308 | {0x3000000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 10309 | {0x3000000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 10310 | {0x3000000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 10311 | {0x3000000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 10312 | {0x3000000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 10313 | {0x3000000, 0x2b94, 0x9503366, 0x9503366, 0x3000080}, | ||
| 10314 | {0x3000000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 10315 | {0x3000000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 10316 | {0x3000000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 10317 | {0x3000000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 10318 | {0x3000000, 0x2b94, 0x966320b, 0x966320b, 0x3000080}, | ||
| 10319 | {0x3000000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 10320 | {0x3000000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 10321 | {0x3000000, 0x2b94, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 10322 | {0x3000000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 10323 | {0x3000000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 10324 | {0x3000000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 10325 | {0x3000000, 0x636d24, 0x0, 0x0, 0x3000080}, | ||
| 10326 | {0x3000000, 0x636d24, 0x1, 0x0, 0x3000080}, | ||
| 10327 | {0x3000000, 0x636d24, 0x76, 0x0, 0x3000080}, | ||
| 10328 | {0x3000000, 0x636d24, 0x2b94, 0x0, 0x3000080}, | ||
| 10329 | {0x3000000, 0x636d24, 0x636d24, 0x0, 0x3000080}, | ||
| 10330 | {0x3000000, 0x636d24, 0x7fffff, 0x0, 0x3000080}, | ||
| 10331 | {0x3000000, 0x636d24, 0x800000, 0x800000, 0x3000080}, | ||
| 10332 | {0x3000000, 0x636d24, 0x800002, 0x800002, 0x3000080}, | ||
| 10333 | {0x3000000, 0x636d24, 0x1398437, 0x1398437, 0x3000080}, | ||
| 10334 | {0x3000000, 0x636d24, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 10335 | {0x3000000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 10336 | {0x3000000, 0x636d24, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 10337 | {0x3000000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 10338 | {0x3000000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 10339 | {0x3000000, 0x636d24, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 10340 | {0x3000000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 10341 | {0x3000000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 10342 | {0x3000000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 10343 | {0x3000000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 10344 | {0x3000000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10345 | {0x3000000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 10346 | {0x3000000, 0x636d24, 0x80000000, 0x0, 0x3000080}, | ||
| 10347 | {0x3000000, 0x636d24, 0x80000001, 0x0, 0x3000080}, | ||
| 10348 | {0x3000000, 0x636d24, 0x80000076, 0x0, 0x3000080}, | ||
| 10349 | {0x3000000, 0x636d24, 0x80002b94, 0x0, 0x3000080}, | ||
| 10350 | {0x3000000, 0x636d24, 0x80636d24, 0x0, 0x3000080}, | ||
| 10351 | {0x3000000, 0x636d24, 0x807fffff, 0x0, 0x3000080}, | ||
| 10352 | {0x3000000, 0x636d24, 0x80800000, 0x80800000, 0x3000080}, | ||
| 10353 | {0x3000000, 0x636d24, 0x80800002, 0x80800002, 0x3000080}, | ||
| 10354 | {0x3000000, 0x636d24, 0x81398437, 0x81398437, 0x3000080}, | ||
| 10355 | {0x3000000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 10356 | {0x3000000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 10357 | {0x3000000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 10358 | {0x3000000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 10359 | {0x3000000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 10360 | {0x3000000, 0x636d24, 0xff800000, 0xff800000, 0x3000080}, | ||
| 10361 | {0x3000000, 0x636d24, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 10362 | {0x3000000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 10363 | {0x3000000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 10364 | {0x3000000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 10365 | {0x3000000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10366 | {0x3000000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 10367 | {0x3000000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 10368 | {0x3000000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 10369 | {0x3000000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 10370 | {0x3000000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 10371 | {0x3000000, 0x636d24, 0x9503366, 0x9503366, 0x3000080}, | ||
| 10372 | {0x3000000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 10373 | {0x3000000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 10374 | {0x3000000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 10375 | {0x3000000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 10376 | {0x3000000, 0x636d24, 0x966320b, 0x966320b, 0x3000080}, | ||
| 10377 | {0x3000000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 10378 | {0x3000000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 10379 | {0x3000000, 0x636d24, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 10380 | {0x3000000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 10381 | {0x3000000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 10382 | {0x3000000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 10383 | {0x3000000, 0x7fffff, 0x0, 0x0, 0x3000080}, | ||
| 10384 | {0x3000000, 0x7fffff, 0x1, 0x0, 0x3000080}, | ||
| 10385 | {0x3000000, 0x7fffff, 0x76, 0x0, 0x3000080}, | ||
| 10386 | {0x3000000, 0x7fffff, 0x2b94, 0x0, 0x3000080}, | ||
| 10387 | {0x3000000, 0x7fffff, 0x636d24, 0x0, 0x3000080}, | ||
| 10388 | {0x3000000, 0x7fffff, 0x7fffff, 0x0, 0x3000080}, | ||
| 10389 | {0x3000000, 0x7fffff, 0x800000, 0x800000, 0x3000080}, | ||
| 10390 | {0x3000000, 0x7fffff, 0x800002, 0x800002, 0x3000080}, | ||
| 10391 | {0x3000000, 0x7fffff, 0x1398437, 0x1398437, 0x3000080}, | ||
| 10392 | {0x3000000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 10393 | {0x3000000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 10394 | {0x3000000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 10395 | {0x3000000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 10396 | {0x3000000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 10397 | {0x3000000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 10398 | {0x3000000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 10399 | {0x3000000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 10400 | {0x3000000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 10401 | {0x3000000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 10402 | {0x3000000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10403 | {0x3000000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 10404 | {0x3000000, 0x7fffff, 0x80000000, 0x0, 0x3000080}, | ||
| 10405 | {0x3000000, 0x7fffff, 0x80000001, 0x0, 0x3000080}, | ||
| 10406 | {0x3000000, 0x7fffff, 0x80000076, 0x0, 0x3000080}, | ||
| 10407 | {0x3000000, 0x7fffff, 0x80002b94, 0x0, 0x3000080}, | ||
| 10408 | {0x3000000, 0x7fffff, 0x80636d24, 0x0, 0x3000080}, | ||
| 10409 | {0x3000000, 0x7fffff, 0x807fffff, 0x0, 0x3000080}, | ||
| 10410 | {0x3000000, 0x7fffff, 0x80800000, 0x80800000, 0x3000080}, | ||
| 10411 | {0x3000000, 0x7fffff, 0x80800002, 0x80800002, 0x3000080}, | ||
| 10412 | {0x3000000, 0x7fffff, 0x81398437, 0x81398437, 0x3000080}, | ||
| 10413 | {0x3000000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 10414 | {0x3000000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 10415 | {0x3000000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 10416 | {0x3000000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 10417 | {0x3000000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 10418 | {0x3000000, 0x7fffff, 0xff800000, 0xff800000, 0x3000080}, | ||
| 10419 | {0x3000000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 10420 | {0x3000000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 10421 | {0x3000000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 10422 | {0x3000000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 10423 | {0x3000000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 10424 | {0x3000000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 10425 | {0x3000000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 10426 | {0x3000000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 10427 | {0x3000000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 10428 | {0x3000000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 10429 | {0x3000000, 0x7fffff, 0x9503366, 0x9503366, 0x3000080}, | ||
| 10430 | {0x3000000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 10431 | {0x3000000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 10432 | {0x3000000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 10433 | {0x3000000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 10434 | {0x3000000, 0x7fffff, 0x966320b, 0x966320b, 0x3000080}, | ||
| 10435 | {0x3000000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 10436 | {0x3000000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 10437 | {0x3000000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 10438 | {0x3000000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 10439 | {0x3000000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 10440 | {0x3000000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 10441 | {0x3000000, 0x800000, 0x0, 0x800000, 0x3000000}, | ||
| 10442 | {0x3000000, 0x800000, 0x1, 0x800000, 0x3000080}, | ||
| 10443 | {0x3000000, 0x800000, 0x76, 0x800000, 0x3000080}, | ||
| 10444 | {0x3000000, 0x800000, 0x2b94, 0x800000, 0x3000080}, | ||
| 10445 | {0x3000000, 0x800000, 0x636d24, 0x800000, 0x3000080}, | ||
| 10446 | {0x3000000, 0x800000, 0x7fffff, 0x800000, 0x3000080}, | ||
| 10447 | {0x3000000, 0x800000, 0x800000, 0x1000000, 0x3000000}, | ||
| 10448 | {0x3000000, 0x800000, 0x800002, 0x1000001, 0x3000000}, | ||
| 10449 | {0x3000000, 0x800000, 0x1398437, 0x1798437, 0x3000000}, | ||
| 10450 | {0x3000000, 0x800000, 0xba98d27, 0xba98d29, 0x3000000}, | ||
| 10451 | {0x3000000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3000000}, | ||
| 10452 | {0x3000000, 0x800000, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 10453 | {0x3000000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 10454 | {0x3000000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 10455 | {0x3000000, 0x800000, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10456 | {0x3000000, 0x800000, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10457 | {0x3000000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10458 | {0x3000000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10459 | {0x3000000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10460 | {0x3000000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10461 | {0x3000000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10462 | {0x3000000, 0x800000, 0x80000000, 0x800000, 0x3000000}, | ||
| 10463 | {0x3000000, 0x800000, 0x80000001, 0x800000, 0x3000080}, | ||
| 10464 | {0x3000000, 0x800000, 0x80000076, 0x800000, 0x3000080}, | ||
| 10465 | {0x3000000, 0x800000, 0x80002b94, 0x800000, 0x3000080}, | ||
| 10466 | {0x3000000, 0x800000, 0x80636d24, 0x800000, 0x3000080}, | ||
| 10467 | {0x3000000, 0x800000, 0x807fffff, 0x800000, 0x3000080}, | ||
| 10468 | {0x3000000, 0x800000, 0x80800000, 0x0, 0x3000000}, | ||
| 10469 | {0x3000000, 0x800000, 0x80800002, 0x0, 0x3000008}, | ||
| 10470 | {0x3000000, 0x800000, 0x81398437, 0x80f3086e, 0x3000000}, | ||
| 10471 | {0x3000000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3000000}, | ||
| 10472 | {0x3000000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3000000}, | ||
| 10473 | {0x3000000, 0x800000, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 10474 | {0x3000000, 0x800000, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 10475 | {0x3000000, 0x800000, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 10476 | {0x3000000, 0x800000, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10477 | {0x3000000, 0x800000, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10478 | {0x3000000, 0x800000, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10479 | {0x3000000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10480 | {0x3000000, 0x800000, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10481 | {0x3000000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10482 | {0x3000000, 0x800000, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10483 | {0x3000000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 10484 | {0x3000000, 0x800000, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 10485 | {0x3000000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 10486 | {0x3000000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 10487 | {0x3000000, 0x800000, 0x9503366, 0x95033a6, 0x3000000}, | ||
| 10488 | {0x3000000, 0x800000, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 10489 | {0x3000000, 0x800000, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 10490 | {0x3000000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 10491 | {0x3000000, 0x800000, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 10492 | {0x3000000, 0x800000, 0x966320b, 0x966324b, 0x3000000}, | ||
| 10493 | {0x3000000, 0x800000, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 10494 | {0x3000000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 10495 | {0x3000000, 0x800000, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 10496 | {0x3000000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 10497 | {0x3000000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 10498 | {0x3000000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 10499 | {0x3000000, 0x800002, 0x0, 0x800002, 0x3000000}, | ||
| 10500 | {0x3000000, 0x800002, 0x1, 0x800002, 0x3000080}, | ||
| 10501 | {0x3000000, 0x800002, 0x76, 0x800002, 0x3000080}, | ||
| 10502 | {0x3000000, 0x800002, 0x2b94, 0x800002, 0x3000080}, | ||
| 10503 | {0x3000000, 0x800002, 0x636d24, 0x800002, 0x3000080}, | ||
| 10504 | {0x3000000, 0x800002, 0x7fffff, 0x800002, 0x3000080}, | ||
| 10505 | {0x3000000, 0x800002, 0x800000, 0x1000001, 0x3000000}, | ||
| 10506 | {0x3000000, 0x800002, 0x800002, 0x1000002, 0x3000000}, | ||
| 10507 | {0x3000000, 0x800002, 0x1398437, 0x1798438, 0x3000000}, | ||
| 10508 | {0x3000000, 0x800002, 0xba98d27, 0xba98d29, 0x3000010}, | ||
| 10509 | {0x3000000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3000010}, | ||
| 10510 | {0x3000000, 0x800002, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 10511 | {0x3000000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 10512 | {0x3000000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 10513 | {0x3000000, 0x800002, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10514 | {0x3000000, 0x800002, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10515 | {0x3000000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10516 | {0x3000000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10517 | {0x3000000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10518 | {0x3000000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10519 | {0x3000000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10520 | {0x3000000, 0x800002, 0x80000000, 0x800002, 0x3000000}, | ||
| 10521 | {0x3000000, 0x800002, 0x80000001, 0x800002, 0x3000080}, | ||
| 10522 | {0x3000000, 0x800002, 0x80000076, 0x800002, 0x3000080}, | ||
| 10523 | {0x3000000, 0x800002, 0x80002b94, 0x800002, 0x3000080}, | ||
| 10524 | {0x3000000, 0x800002, 0x80636d24, 0x800002, 0x3000080}, | ||
| 10525 | {0x3000000, 0x800002, 0x807fffff, 0x800002, 0x3000080}, | ||
| 10526 | {0x3000000, 0x800002, 0x80800000, 0x0, 0x3000008}, | ||
| 10527 | {0x3000000, 0x800002, 0x80800002, 0x0, 0x3000000}, | ||
| 10528 | {0x3000000, 0x800002, 0x81398437, 0x80f3086c, 0x3000000}, | ||
| 10529 | {0x3000000, 0x800002, 0x8ba98d27, 0x8ba98d25, 0x3000010}, | ||
| 10530 | {0x3000000, 0x800002, 0x8ba98d7a, 0x8ba98d78, 0x3000010}, | ||
| 10531 | {0x3000000, 0x800002, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 10532 | {0x3000000, 0x800002, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 10533 | {0x3000000, 0x800002, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 10534 | {0x3000000, 0x800002, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10535 | {0x3000000, 0x800002, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10536 | {0x3000000, 0x800002, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10537 | {0x3000000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10538 | {0x3000000, 0x800002, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10539 | {0x3000000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10540 | {0x3000000, 0x800002, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10541 | {0x3000000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 10542 | {0x3000000, 0x800002, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 10543 | {0x3000000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 10544 | {0x3000000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 10545 | {0x3000000, 0x800002, 0x9503366, 0x95033a6, 0x3000010}, | ||
| 10546 | {0x3000000, 0x800002, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 10547 | {0x3000000, 0x800002, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 10548 | {0x3000000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 10549 | {0x3000000, 0x800002, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 10550 | {0x3000000, 0x800002, 0x966320b, 0x966324b, 0x3000010}, | ||
| 10551 | {0x3000000, 0x800002, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 10552 | {0x3000000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 10553 | {0x3000000, 0x800002, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 10554 | {0x3000000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 10555 | {0x3000000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 10556 | {0x3000000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 10557 | {0x3000000, 0x1398437, 0x0, 0x1398437, 0x3000000}, | ||
| 10558 | {0x3000000, 0x1398437, 0x1, 0x1398437, 0x3000080}, | ||
| 10559 | {0x3000000, 0x1398437, 0x76, 0x1398437, 0x3000080}, | ||
| 10560 | {0x3000000, 0x1398437, 0x2b94, 0x1398437, 0x3000080}, | ||
| 10561 | {0x3000000, 0x1398437, 0x636d24, 0x1398437, 0x3000080}, | ||
| 10562 | {0x3000000, 0x1398437, 0x7fffff, 0x1398437, 0x3000080}, | ||
| 10563 | {0x3000000, 0x1398437, 0x800000, 0x1798437, 0x3000000}, | ||
| 10564 | {0x3000000, 0x1398437, 0x800002, 0x1798438, 0x3000000}, | ||
| 10565 | {0x3000000, 0x1398437, 0x1398437, 0x1b98437, 0x3000000}, | ||
| 10566 | {0x3000000, 0x1398437, 0xba98d27, 0xba98d2d, 0x3000010}, | ||
| 10567 | {0x3000000, 0x1398437, 0xba98d7a, 0xba98d80, 0x3000010}, | ||
| 10568 | {0x3000000, 0x1398437, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 10569 | {0x3000000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 10570 | {0x3000000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 10571 | {0x3000000, 0x1398437, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10572 | {0x3000000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10573 | {0x3000000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10574 | {0x3000000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10575 | {0x3000000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10576 | {0x3000000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10577 | {0x3000000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10578 | {0x3000000, 0x1398437, 0x80000000, 0x1398437, 0x3000000}, | ||
| 10579 | {0x3000000, 0x1398437, 0x80000001, 0x1398437, 0x3000080}, | ||
| 10580 | {0x3000000, 0x1398437, 0x80000076, 0x1398437, 0x3000080}, | ||
| 10581 | {0x3000000, 0x1398437, 0x80002b94, 0x1398437, 0x3000080}, | ||
| 10582 | {0x3000000, 0x1398437, 0x80636d24, 0x1398437, 0x3000080}, | ||
| 10583 | {0x3000000, 0x1398437, 0x807fffff, 0x1398437, 0x3000080}, | ||
| 10584 | {0x3000000, 0x1398437, 0x80800000, 0xf3086e, 0x3000000}, | ||
| 10585 | {0x3000000, 0x1398437, 0x80800002, 0xf3086c, 0x3000000}, | ||
| 10586 | {0x3000000, 0x1398437, 0x81398437, 0x0, 0x3000000}, | ||
| 10587 | {0x3000000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3000010}, | ||
| 10588 | {0x3000000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3000010}, | ||
| 10589 | {0x3000000, 0x1398437, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 10590 | {0x3000000, 0x1398437, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 10591 | {0x3000000, 0x1398437, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 10592 | {0x3000000, 0x1398437, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10593 | {0x3000000, 0x1398437, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10594 | {0x3000000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10595 | {0x3000000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10596 | {0x3000000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10597 | {0x3000000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10598 | {0x3000000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10599 | {0x3000000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 10600 | {0x3000000, 0x1398437, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 10601 | {0x3000000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 10602 | {0x3000000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 10603 | {0x3000000, 0x1398437, 0x9503366, 0x9503420, 0x3000010}, | ||
| 10604 | {0x3000000, 0x1398437, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 10605 | {0x3000000, 0x1398437, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 10606 | {0x3000000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 10607 | {0x3000000, 0x1398437, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 10608 | {0x3000000, 0x1398437, 0x966320b, 0x96632c5, 0x3000010}, | ||
| 10609 | {0x3000000, 0x1398437, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 10610 | {0x3000000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 10611 | {0x3000000, 0x1398437, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 10612 | {0x3000000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 10613 | {0x3000000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 10614 | {0x3000000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 10615 | {0x3000000, 0xba98d27, 0x0, 0xba98d27, 0x3000000}, | ||
| 10616 | {0x3000000, 0xba98d27, 0x1, 0xba98d27, 0x3000080}, | ||
| 10617 | {0x3000000, 0xba98d27, 0x76, 0xba98d27, 0x3000080}, | ||
| 10618 | {0x3000000, 0xba98d27, 0x2b94, 0xba98d27, 0x3000080}, | ||
| 10619 | {0x3000000, 0xba98d27, 0x636d24, 0xba98d27, 0x3000080}, | ||
| 10620 | {0x3000000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3000080}, | ||
| 10621 | {0x3000000, 0xba98d27, 0x800000, 0xba98d29, 0x3000000}, | ||
| 10622 | {0x3000000, 0xba98d27, 0x800002, 0xba98d29, 0x3000010}, | ||
| 10623 | {0x3000000, 0xba98d27, 0x1398437, 0xba98d2d, 0x3000010}, | ||
| 10624 | {0x3000000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3000000}, | ||
| 10625 | {0x3000000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3000010}, | ||
| 10626 | {0x3000000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 10627 | {0x3000000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 10628 | {0x3000000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 10629 | {0x3000000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10630 | {0x3000000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10631 | {0x3000000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10632 | {0x3000000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10633 | {0x3000000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10634 | {0x3000000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10635 | {0x3000000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10636 | {0x3000000, 0xba98d27, 0x80000000, 0xba98d27, 0x3000000}, | ||
| 10637 | {0x3000000, 0xba98d27, 0x80000001, 0xba98d27, 0x3000080}, | ||
| 10638 | {0x3000000, 0xba98d27, 0x80000076, 0xba98d27, 0x3000080}, | ||
| 10639 | {0x3000000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3000080}, | ||
| 10640 | {0x3000000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3000080}, | ||
| 10641 | {0x3000000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3000080}, | ||
| 10642 | {0x3000000, 0xba98d27, 0x80800000, 0xba98d25, 0x3000000}, | ||
| 10643 | {0x3000000, 0xba98d27, 0x80800002, 0xba98d25, 0x3000010}, | ||
| 10644 | {0x3000000, 0xba98d27, 0x81398437, 0xba98d21, 0x3000010}, | ||
| 10645 | {0x3000000, 0xba98d27, 0x8ba98d27, 0x0, 0x3000000}, | ||
| 10646 | {0x3000000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3000000}, | ||
| 10647 | {0x3000000, 0xba98d27, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 10648 | {0x3000000, 0xba98d27, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 10649 | {0x3000000, 0xba98d27, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 10650 | {0x3000000, 0xba98d27, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10651 | {0x3000000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10652 | {0x3000000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10653 | {0x3000000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10654 | {0x3000000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10655 | {0x3000000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10656 | {0x3000000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10657 | {0x3000000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 10658 | {0x3000000, 0xba98d27, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 10659 | {0x3000000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 10660 | {0x3000000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 10661 | {0x3000000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3000010}, | ||
| 10662 | {0x3000000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 10663 | {0x3000000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 10664 | {0x3000000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 10665 | {0x3000000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 10666 | {0x3000000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3000010}, | ||
| 10667 | {0x3000000, 0xba98d27, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 10668 | {0x3000000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 10669 | {0x3000000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 10670 | {0x3000000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 10671 | {0x3000000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 10672 | {0x3000000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 10673 | {0x3000000, 0xba98d7a, 0x0, 0xba98d7a, 0x3000000}, | ||
| 10674 | {0x3000000, 0xba98d7a, 0x1, 0xba98d7a, 0x3000080}, | ||
| 10675 | {0x3000000, 0xba98d7a, 0x76, 0xba98d7a, 0x3000080}, | ||
| 10676 | {0x3000000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3000080}, | ||
| 10677 | {0x3000000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3000080}, | ||
| 10678 | {0x3000000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3000080}, | ||
| 10679 | {0x3000000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3000000}, | ||
| 10680 | {0x3000000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3000010}, | ||
| 10681 | {0x3000000, 0xba98d7a, 0x1398437, 0xba98d80, 0x3000010}, | ||
| 10682 | {0x3000000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3000010}, | ||
| 10683 | {0x3000000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3000000}, | ||
| 10684 | {0x3000000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 10685 | {0x3000000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 10686 | {0x3000000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 10687 | {0x3000000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10688 | {0x3000000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10689 | {0x3000000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10690 | {0x3000000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10691 | {0x3000000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10692 | {0x3000000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10693 | {0x3000000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10694 | {0x3000000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3000000}, | ||
| 10695 | {0x3000000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3000080}, | ||
| 10696 | {0x3000000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3000080}, | ||
| 10697 | {0x3000000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3000080}, | ||
| 10698 | {0x3000000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3000080}, | ||
| 10699 | {0x3000000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3000080}, | ||
| 10700 | {0x3000000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3000000}, | ||
| 10701 | {0x3000000, 0xba98d7a, 0x80800002, 0xba98d78, 0x3000010}, | ||
| 10702 | {0x3000000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3000010}, | ||
| 10703 | {0x3000000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3000000}, | ||
| 10704 | {0x3000000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3000000}, | ||
| 10705 | {0x3000000, 0xba98d7a, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 10706 | {0x3000000, 0xba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 10707 | {0x3000000, 0xba98d7a, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 10708 | {0x3000000, 0xba98d7a, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10709 | {0x3000000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10710 | {0x3000000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10711 | {0x3000000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10712 | {0x3000000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10713 | {0x3000000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10714 | {0x3000000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10715 | {0x3000000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 10716 | {0x3000000, 0xba98d7a, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 10717 | {0x3000000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 10718 | {0x3000000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 10719 | {0x3000000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3000010}, | ||
| 10720 | {0x3000000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 10721 | {0x3000000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 10722 | {0x3000000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 10723 | {0x3000000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 10724 | {0x3000000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3000010}, | ||
| 10725 | {0x3000000, 0xba98d7a, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 10726 | {0x3000000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 10727 | {0x3000000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 10728 | {0x3000000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 10729 | {0x3000000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 10730 | {0x3000000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 10731 | {0x3000000, 0x751f853a, 0x0, 0x751f853a, 0x3000000}, | ||
| 10732 | {0x3000000, 0x751f853a, 0x1, 0x751f853a, 0x3000080}, | ||
| 10733 | {0x3000000, 0x751f853a, 0x76, 0x751f853a, 0x3000080}, | ||
| 10734 | {0x3000000, 0x751f853a, 0x2b94, 0x751f853a, 0x3000080}, | ||
| 10735 | {0x3000000, 0x751f853a, 0x636d24, 0x751f853a, 0x3000080}, | ||
| 10736 | {0x3000000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3000080}, | ||
| 10737 | {0x3000000, 0x751f853a, 0x800000, 0x751f853a, 0x3000010}, | ||
| 10738 | {0x3000000, 0x751f853a, 0x800002, 0x751f853a, 0x3000010}, | ||
| 10739 | {0x3000000, 0x751f853a, 0x1398437, 0x751f853a, 0x3000010}, | ||
| 10740 | {0x3000000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3000010}, | ||
| 10741 | {0x3000000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3000010}, | ||
| 10742 | {0x3000000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3000000}, | ||
| 10743 | {0x3000000, 0x751f853a, 0x7f7ffff0, 0x7f7ffffa, 0x3000010}, | ||
| 10744 | {0x3000000, 0x751f853a, 0x7f7fffff, 0x7f800000, 0x3000014}, | ||
| 10745 | {0x3000000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10746 | {0x3000000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10747 | {0x3000000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10748 | {0x3000000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10749 | {0x3000000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10750 | {0x3000000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10751 | {0x3000000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10752 | {0x3000000, 0x751f853a, 0x80000000, 0x751f853a, 0x3000000}, | ||
| 10753 | {0x3000000, 0x751f853a, 0x80000001, 0x751f853a, 0x3000080}, | ||
| 10754 | {0x3000000, 0x751f853a, 0x80000076, 0x751f853a, 0x3000080}, | ||
| 10755 | {0x3000000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3000080}, | ||
| 10756 | {0x3000000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3000080}, | ||
| 10757 | {0x3000000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3000080}, | ||
| 10758 | {0x3000000, 0x751f853a, 0x80800000, 0x751f853a, 0x3000010}, | ||
| 10759 | {0x3000000, 0x751f853a, 0x80800002, 0x751f853a, 0x3000010}, | ||
| 10760 | {0x3000000, 0x751f853a, 0x81398437, 0x751f853a, 0x3000010}, | ||
| 10761 | {0x3000000, 0x751f853a, 0x8ba98d27, 0x751f853a, 0x3000010}, | ||
| 10762 | {0x3000000, 0x751f853a, 0x8ba98d7a, 0x751f853a, 0x3000010}, | ||
| 10763 | {0x3000000, 0x751f853a, 0xf51f853a, 0x0, 0x3000000}, | ||
| 10764 | {0x3000000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3000010}, | ||
| 10765 | {0x3000000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3000010}, | ||
| 10766 | {0x3000000, 0x751f853a, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10767 | {0x3000000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10768 | {0x3000000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10769 | {0x3000000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10770 | {0x3000000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10771 | {0x3000000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10772 | {0x3000000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10773 | {0x3000000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3000010}, | ||
| 10774 | {0x3000000, 0x751f853a, 0xe73a5134, 0x751f853a, 0x3000010}, | ||
| 10775 | {0x3000000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3000010}, | ||
| 10776 | {0x3000000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3000010}, | ||
| 10777 | {0x3000000, 0x751f853a, 0x9503366, 0x751f853a, 0x3000010}, | ||
| 10778 | {0x3000000, 0x751f853a, 0xbf5a97c9, 0x751f853a, 0x3000010}, | ||
| 10779 | {0x3000000, 0x751f853a, 0xe6ff1a14, 0x751f853a, 0x3000010}, | ||
| 10780 | {0x3000000, 0x751f853a, 0x77f31e2f, 0x77f81a59, 0x3000010}, | ||
| 10781 | {0x3000000, 0x751f853a, 0xaab4d7d8, 0x751f853a, 0x3000010}, | ||
| 10782 | {0x3000000, 0x751f853a, 0x966320b, 0x751f853a, 0x3000010}, | ||
| 10783 | {0x3000000, 0x751f853a, 0xb26bddee, 0x751f853a, 0x3000010}, | ||
| 10784 | {0x3000000, 0x751f853a, 0xb5c8e5d3, 0x751f853a, 0x3000010}, | ||
| 10785 | {0x3000000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3000010}, | ||
| 10786 | {0x3000000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3000010}, | ||
| 10787 | {0x3000000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3000010}, | ||
| 10788 | {0x3000000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3000010}, | ||
| 10789 | {0x3000000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3000000}, | ||
| 10790 | {0x3000000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3000080}, | ||
| 10791 | {0x3000000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3000080}, | ||
| 10792 | {0x3000000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3000080}, | ||
| 10793 | {0x3000000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3000080}, | ||
| 10794 | {0x3000000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3000080}, | ||
| 10795 | {0x3000000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3000010}, | ||
| 10796 | {0x3000000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3000010}, | ||
| 10797 | {0x3000000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3000010}, | ||
| 10798 | {0x3000000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3000010}, | ||
| 10799 | {0x3000000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3000010}, | ||
| 10800 | {0x3000000, 0x7f7ffff0, 0x751f853a, 0x7f7ffffa, 0x3000010}, | ||
| 10801 | {0x3000000, 0x7f7ffff0, 0x7f7ffff0, 0x7f800000, 0x3000014}, | ||
| 10802 | {0x3000000, 0x7f7ffff0, 0x7f7fffff, 0x7f800000, 0x3000014}, | ||
| 10803 | {0x3000000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10804 | {0x3000000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10805 | {0x3000000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10806 | {0x3000000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10807 | {0x3000000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10808 | {0x3000000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10809 | {0x3000000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10810 | {0x3000000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3000000}, | ||
| 10811 | {0x3000000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3000080}, | ||
| 10812 | {0x3000000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3000080}, | ||
| 10813 | {0x3000000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3000080}, | ||
| 10814 | {0x3000000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3000080}, | ||
| 10815 | {0x3000000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3000080}, | ||
| 10816 | {0x3000000, 0x7f7ffff0, 0x80800000, 0x7f7ffff0, 0x3000010}, | ||
| 10817 | {0x3000000, 0x7f7ffff0, 0x80800002, 0x7f7ffff0, 0x3000010}, | ||
| 10818 | {0x3000000, 0x7f7ffff0, 0x81398437, 0x7f7ffff0, 0x3000010}, | ||
| 10819 | {0x3000000, 0x7f7ffff0, 0x8ba98d27, 0x7f7ffff0, 0x3000010}, | ||
| 10820 | {0x3000000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7ffff0, 0x3000010}, | ||
| 10821 | {0x3000000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3000010}, | ||
| 10822 | {0x3000000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3000000}, | ||
| 10823 | {0x3000000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3000000}, | ||
| 10824 | {0x3000000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10825 | {0x3000000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10826 | {0x3000000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10827 | {0x3000000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10828 | {0x3000000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10829 | {0x3000000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10830 | {0x3000000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10831 | {0x3000000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3000010}, | ||
| 10832 | {0x3000000, 0x7f7ffff0, 0xe73a5134, 0x7f7ffff0, 0x3000010}, | ||
| 10833 | {0x3000000, 0x7f7ffff0, 0x7c994e9e, 0x7f800000, 0x3000014}, | ||
| 10834 | {0x3000000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3000010}, | ||
| 10835 | {0x3000000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3000010}, | ||
| 10836 | {0x3000000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7ffff0, 0x3000010}, | ||
| 10837 | {0x3000000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7ffff0, 0x3000010}, | ||
| 10838 | {0x3000000, 0x7f7ffff0, 0x77f31e2f, 0x7f800000, 0x3000014}, | ||
| 10839 | {0x3000000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7ffff0, 0x3000010}, | ||
| 10840 | {0x3000000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3000010}, | ||
| 10841 | {0x3000000, 0x7f7ffff0, 0xb26bddee, 0x7f7ffff0, 0x3000010}, | ||
| 10842 | {0x3000000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7ffff0, 0x3000010}, | ||
| 10843 | {0x3000000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3000010}, | ||
| 10844 | {0x3000000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3000010}, | ||
| 10845 | {0x3000000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3000010}, | ||
| 10846 | {0x3000000, 0x7f7ffff0, 0x7b906a6c, 0x7f800000, 0x3000014}, | ||
| 10847 | {0x3000000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3000000}, | ||
| 10848 | {0x3000000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3000080}, | ||
| 10849 | {0x3000000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3000080}, | ||
| 10850 | {0x3000000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3000080}, | ||
| 10851 | {0x3000000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3000080}, | ||
| 10852 | {0x3000000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3000080}, | ||
| 10853 | {0x3000000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3000010}, | ||
| 10854 | {0x3000000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3000010}, | ||
| 10855 | {0x3000000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3000010}, | ||
| 10856 | {0x3000000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3000010}, | ||
| 10857 | {0x3000000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3000010}, | ||
| 10858 | {0x3000000, 0x7f7fffff, 0x751f853a, 0x7f800000, 0x3000014}, | ||
| 10859 | {0x3000000, 0x7f7fffff, 0x7f7ffff0, 0x7f800000, 0x3000014}, | ||
| 10860 | {0x3000000, 0x7f7fffff, 0x7f7fffff, 0x7f800000, 0x3000014}, | ||
| 10861 | {0x3000000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10862 | {0x3000000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10863 | {0x3000000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10864 | {0x3000000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10865 | {0x3000000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10866 | {0x3000000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10867 | {0x3000000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10868 | {0x3000000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3000000}, | ||
| 10869 | {0x3000000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3000080}, | ||
| 10870 | {0x3000000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3000080}, | ||
| 10871 | {0x3000000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3000080}, | ||
| 10872 | {0x3000000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3000080}, | ||
| 10873 | {0x3000000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3000080}, | ||
| 10874 | {0x3000000, 0x7f7fffff, 0x80800000, 0x7f7fffff, 0x3000010}, | ||
| 10875 | {0x3000000, 0x7f7fffff, 0x80800002, 0x7f7fffff, 0x3000010}, | ||
| 10876 | {0x3000000, 0x7f7fffff, 0x81398437, 0x7f7fffff, 0x3000010}, | ||
| 10877 | {0x3000000, 0x7f7fffff, 0x8ba98d27, 0x7f7fffff, 0x3000010}, | ||
| 10878 | {0x3000000, 0x7f7fffff, 0x8ba98d7a, 0x7f7fffff, 0x3000010}, | ||
| 10879 | {0x3000000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3000010}, | ||
| 10880 | {0x3000000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3000000}, | ||
| 10881 | {0x3000000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3000000}, | ||
| 10882 | {0x3000000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3000000}, | ||
| 10883 | {0x3000000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10884 | {0x3000000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10885 | {0x3000000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10886 | {0x3000000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10887 | {0x3000000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10888 | {0x3000000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10889 | {0x3000000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3000010}, | ||
| 10890 | {0x3000000, 0x7f7fffff, 0xe73a5134, 0x7f7fffff, 0x3000010}, | ||
| 10891 | {0x3000000, 0x7f7fffff, 0x7c994e9e, 0x7f800000, 0x3000014}, | ||
| 10892 | {0x3000000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3000010}, | ||
| 10893 | {0x3000000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3000010}, | ||
| 10894 | {0x3000000, 0x7f7fffff, 0xbf5a97c9, 0x7f7fffff, 0x3000010}, | ||
| 10895 | {0x3000000, 0x7f7fffff, 0xe6ff1a14, 0x7f7fffff, 0x3000010}, | ||
| 10896 | {0x3000000, 0x7f7fffff, 0x77f31e2f, 0x7f800000, 0x3000014}, | ||
| 10897 | {0x3000000, 0x7f7fffff, 0xaab4d7d8, 0x7f7fffff, 0x3000010}, | ||
| 10898 | {0x3000000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3000010}, | ||
| 10899 | {0x3000000, 0x7f7fffff, 0xb26bddee, 0x7f7fffff, 0x3000010}, | ||
| 10900 | {0x3000000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7fffff, 0x3000010}, | ||
| 10901 | {0x3000000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3000010}, | ||
| 10902 | {0x3000000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3000010}, | ||
| 10903 | {0x3000000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3000010}, | ||
| 10904 | {0x3000000, 0x7f7fffff, 0x7b906a6c, 0x7f800000, 0x3000014}, | ||
| 10905 | {0x3000000, 0x7f800000, 0x0, 0x7f800000, 0x3000000}, | ||
| 10906 | {0x3000000, 0x7f800000, 0x1, 0x7f800000, 0x3000080}, | ||
| 10907 | {0x3000000, 0x7f800000, 0x76, 0x7f800000, 0x3000080}, | ||
| 10908 | {0x3000000, 0x7f800000, 0x2b94, 0x7f800000, 0x3000080}, | ||
| 10909 | {0x3000000, 0x7f800000, 0x636d24, 0x7f800000, 0x3000080}, | ||
| 10910 | {0x3000000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3000080}, | ||
| 10911 | {0x3000000, 0x7f800000, 0x800000, 0x7f800000, 0x3000000}, | ||
| 10912 | {0x3000000, 0x7f800000, 0x800002, 0x7f800000, 0x3000000}, | ||
| 10913 | {0x3000000, 0x7f800000, 0x1398437, 0x7f800000, 0x3000000}, | ||
| 10914 | {0x3000000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3000000}, | ||
| 10915 | {0x3000000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3000000}, | ||
| 10916 | {0x3000000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3000000}, | ||
| 10917 | {0x3000000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3000000}, | ||
| 10918 | {0x3000000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3000000}, | ||
| 10919 | {0x3000000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 10920 | {0x3000000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10921 | {0x3000000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10922 | {0x3000000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10923 | {0x3000000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 10924 | {0x3000000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10925 | {0x3000000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 10926 | {0x3000000, 0x7f800000, 0x80000000, 0x7f800000, 0x3000000}, | ||
| 10927 | {0x3000000, 0x7f800000, 0x80000001, 0x7f800000, 0x3000080}, | ||
| 10928 | {0x3000000, 0x7f800000, 0x80000076, 0x7f800000, 0x3000080}, | ||
| 10929 | {0x3000000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3000080}, | ||
| 10930 | {0x3000000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3000080}, | ||
| 10931 | {0x3000000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3000080}, | ||
| 10932 | {0x3000000, 0x7f800000, 0x80800000, 0x7f800000, 0x3000000}, | ||
| 10933 | {0x3000000, 0x7f800000, 0x80800002, 0x7f800000, 0x3000000}, | ||
| 10934 | {0x3000000, 0x7f800000, 0x81398437, 0x7f800000, 0x3000000}, | ||
| 10935 | {0x3000000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3000000}, | ||
| 10936 | {0x3000000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3000000}, | ||
| 10937 | {0x3000000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3000000}, | ||
| 10938 | {0x3000000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3000000}, | ||
| 10939 | {0x3000000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3000000}, | ||
| 10940 | {0x3000000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3000001}, | ||
| 10941 | {0x3000000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 10942 | {0x3000000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 10943 | {0x3000000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 10944 | {0x3000000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 10945 | {0x3000000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 10946 | {0x3000000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 10947 | {0x3000000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3000000}, | ||
| 10948 | {0x3000000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3000000}, | ||
| 10949 | {0x3000000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3000000}, | ||
| 10950 | {0x3000000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3000000}, | ||
| 10951 | {0x3000000, 0x7f800000, 0x9503366, 0x7f800000, 0x3000000}, | ||
| 10952 | {0x3000000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3000000}, | ||
| 10953 | {0x3000000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3000000}, | ||
| 10954 | {0x3000000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3000000}, | ||
| 10955 | {0x3000000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3000000}, | ||
| 10956 | {0x3000000, 0x7f800000, 0x966320b, 0x7f800000, 0x3000000}, | ||
| 10957 | {0x3000000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3000000}, | ||
| 10958 | {0x3000000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3000000}, | ||
| 10959 | {0x3000000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3000000}, | ||
| 10960 | {0x3000000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3000000}, | ||
| 10961 | {0x3000000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3000000}, | ||
| 10962 | {0x3000000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3000000}, | ||
| 10963 | {0x3000000, 0x7f800001, 0x0, 0x7fc00000, 0x3000001}, | ||
| 10964 | {0x3000000, 0x7f800001, 0x1, 0x7fc00000, 0x3000081}, | ||
| 10965 | {0x3000000, 0x7f800001, 0x76, 0x7fc00000, 0x3000081}, | ||
| 10966 | {0x3000000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3000081}, | ||
| 10967 | {0x3000000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3000081}, | ||
| 10968 | {0x3000000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3000081}, | ||
| 10969 | {0x3000000, 0x7f800001, 0x800000, 0x7fc00000, 0x3000001}, | ||
| 10970 | {0x3000000, 0x7f800001, 0x800002, 0x7fc00000, 0x3000001}, | ||
| 10971 | {0x3000000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3000001}, | ||
| 10972 | {0x3000000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3000001}, | ||
| 10973 | {0x3000000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3000001}, | ||
| 10974 | {0x3000000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3000001}, | ||
| 10975 | {0x3000000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3000001}, | ||
| 10976 | {0x3000000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3000001}, | ||
| 10977 | {0x3000000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3000001}, | ||
| 10978 | {0x3000000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 10979 | {0x3000000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 10980 | {0x3000000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 10981 | {0x3000000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3000001}, | ||
| 10982 | {0x3000000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3000001}, | ||
| 10983 | {0x3000000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3000001}, | ||
| 10984 | {0x3000000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3000001}, | ||
| 10985 | {0x3000000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3000081}, | ||
| 10986 | {0x3000000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3000081}, | ||
| 10987 | {0x3000000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3000081}, | ||
| 10988 | {0x3000000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3000081}, | ||
| 10989 | {0x3000000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3000081}, | ||
| 10990 | {0x3000000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3000001}, | ||
| 10991 | {0x3000000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3000001}, | ||
| 10992 | {0x3000000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3000001}, | ||
| 10993 | {0x3000000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3000001}, | ||
| 10994 | {0x3000000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3000001}, | ||
| 10995 | {0x3000000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3000001}, | ||
| 10996 | {0x3000000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3000001}, | ||
| 10997 | {0x3000000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3000001}, | ||
| 10998 | {0x3000000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3000001}, | ||
| 10999 | {0x3000000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11000 | {0x3000000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11001 | {0x3000000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11002 | {0x3000000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3000001}, | ||
| 11003 | {0x3000000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3000001}, | ||
| 11004 | {0x3000000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3000001}, | ||
| 11005 | {0x3000000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3000001}, | ||
| 11006 | {0x3000000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3000001}, | ||
| 11007 | {0x3000000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3000001}, | ||
| 11008 | {0x3000000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3000001}, | ||
| 11009 | {0x3000000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3000001}, | ||
| 11010 | {0x3000000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3000001}, | ||
| 11011 | {0x3000000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3000001}, | ||
| 11012 | {0x3000000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3000001}, | ||
| 11013 | {0x3000000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3000001}, | ||
| 11014 | {0x3000000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3000001}, | ||
| 11015 | {0x3000000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3000001}, | ||
| 11016 | {0x3000000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, | ||
| 11017 | {0x3000000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3000001}, | ||
| 11018 | {0x3000000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3000001}, | ||
| 11019 | {0x3000000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3000001}, | ||
| 11020 | {0x3000000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3000001}, | ||
| 11021 | {0x3000000, 0x7f984a37, 0x0, 0x7fc00000, 0x3000001}, | ||
| 11022 | {0x3000000, 0x7f984a37, 0x1, 0x7fc00000, 0x3000081}, | ||
| 11023 | {0x3000000, 0x7f984a37, 0x76, 0x7fc00000, 0x3000081}, | ||
| 11024 | {0x3000000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3000081}, | ||
| 11025 | {0x3000000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3000081}, | ||
| 11026 | {0x3000000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3000081}, | ||
| 11027 | {0x3000000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3000001}, | ||
| 11028 | {0x3000000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3000001}, | ||
| 11029 | {0x3000000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3000001}, | ||
| 11030 | {0x3000000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3000001}, | ||
| 11031 | {0x3000000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3000001}, | ||
| 11032 | {0x3000000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3000001}, | ||
| 11033 | {0x3000000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3000001}, | ||
| 11034 | {0x3000000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3000001}, | ||
| 11035 | {0x3000000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3000001}, | ||
| 11036 | {0x3000000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11037 | {0x3000000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11038 | {0x3000000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11039 | {0x3000000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3000001}, | ||
| 11040 | {0x3000000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3000001}, | ||
| 11041 | {0x3000000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3000001}, | ||
| 11042 | {0x3000000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3000001}, | ||
| 11043 | {0x3000000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3000081}, | ||
| 11044 | {0x3000000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3000081}, | ||
| 11045 | {0x3000000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3000081}, | ||
| 11046 | {0x3000000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3000081}, | ||
| 11047 | {0x3000000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3000081}, | ||
| 11048 | {0x3000000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3000001}, | ||
| 11049 | {0x3000000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3000001}, | ||
| 11050 | {0x3000000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3000001}, | ||
| 11051 | {0x3000000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3000001}, | ||
| 11052 | {0x3000000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3000001}, | ||
| 11053 | {0x3000000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3000001}, | ||
| 11054 | {0x3000000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3000001}, | ||
| 11055 | {0x3000000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3000001}, | ||
| 11056 | {0x3000000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3000001}, | ||
| 11057 | {0x3000000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11058 | {0x3000000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11059 | {0x3000000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11060 | {0x3000000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3000001}, | ||
| 11061 | {0x3000000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3000001}, | ||
| 11062 | {0x3000000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3000001}, | ||
| 11063 | {0x3000000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3000001}, | ||
| 11064 | {0x3000000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3000001}, | ||
| 11065 | {0x3000000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3000001}, | ||
| 11066 | {0x3000000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3000001}, | ||
| 11067 | {0x3000000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3000001}, | ||
| 11068 | {0x3000000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3000001}, | ||
| 11069 | {0x3000000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3000001}, | ||
| 11070 | {0x3000000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3000001}, | ||
| 11071 | {0x3000000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3000001}, | ||
| 11072 | {0x3000000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3000001}, | ||
| 11073 | {0x3000000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3000001}, | ||
| 11074 | {0x3000000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, | ||
| 11075 | {0x3000000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3000001}, | ||
| 11076 | {0x3000000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3000001}, | ||
| 11077 | {0x3000000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3000001}, | ||
| 11078 | {0x3000000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3000001}, | ||
| 11079 | {0x3000000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3000001}, | ||
| 11080 | {0x3000000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3000081}, | ||
| 11081 | {0x3000000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3000081}, | ||
| 11082 | {0x3000000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3000081}, | ||
| 11083 | {0x3000000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3000081}, | ||
| 11084 | {0x3000000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3000081}, | ||
| 11085 | {0x3000000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3000001}, | ||
| 11086 | {0x3000000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3000001}, | ||
| 11087 | {0x3000000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3000001}, | ||
| 11088 | {0x3000000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3000001}, | ||
| 11089 | {0x3000000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3000001}, | ||
| 11090 | {0x3000000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3000001}, | ||
| 11091 | {0x3000000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3000001}, | ||
| 11092 | {0x3000000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3000001}, | ||
| 11093 | {0x3000000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3000001}, | ||
| 11094 | {0x3000000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11095 | {0x3000000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11096 | {0x3000000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11097 | {0x3000000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3000001}, | ||
| 11098 | {0x3000000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3000001}, | ||
| 11099 | {0x3000000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3000001}, | ||
| 11100 | {0x3000000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3000001}, | ||
| 11101 | {0x3000000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3000081}, | ||
| 11102 | {0x3000000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3000081}, | ||
| 11103 | {0x3000000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3000081}, | ||
| 11104 | {0x3000000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3000081}, | ||
| 11105 | {0x3000000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3000081}, | ||
| 11106 | {0x3000000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3000001}, | ||
| 11107 | {0x3000000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3000001}, | ||
| 11108 | {0x3000000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3000001}, | ||
| 11109 | {0x3000000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3000001}, | ||
| 11110 | {0x3000000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3000001}, | ||
| 11111 | {0x3000000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3000001}, | ||
| 11112 | {0x3000000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3000001}, | ||
| 11113 | {0x3000000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3000001}, | ||
| 11114 | {0x3000000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3000001}, | ||
| 11115 | {0x3000000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11116 | {0x3000000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11117 | {0x3000000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11118 | {0x3000000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3000001}, | ||
| 11119 | {0x3000000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3000001}, | ||
| 11120 | {0x3000000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3000001}, | ||
| 11121 | {0x3000000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3000001}, | ||
| 11122 | {0x3000000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3000001}, | ||
| 11123 | {0x3000000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3000001}, | ||
| 11124 | {0x3000000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3000001}, | ||
| 11125 | {0x3000000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3000001}, | ||
| 11126 | {0x3000000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3000001}, | ||
| 11127 | {0x3000000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3000001}, | ||
| 11128 | {0x3000000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3000001}, | ||
| 11129 | {0x3000000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3000001}, | ||
| 11130 | {0x3000000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3000001}, | ||
| 11131 | {0x3000000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3000001}, | ||
| 11132 | {0x3000000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, | ||
| 11133 | {0x3000000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3000001}, | ||
| 11134 | {0x3000000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3000001}, | ||
| 11135 | {0x3000000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3000001}, | ||
| 11136 | {0x3000000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3000001}, | ||
| 11137 | {0x3000000, 0x7fc00000, 0x0, 0x7fc00000, 0x3000000}, | ||
| 11138 | {0x3000000, 0x7fc00000, 0x1, 0x7fc00000, 0x3000080}, | ||
| 11139 | {0x3000000, 0x7fc00000, 0x76, 0x7fc00000, 0x3000080}, | ||
| 11140 | {0x3000000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3000080}, | ||
| 11141 | {0x3000000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3000080}, | ||
| 11142 | {0x3000000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3000080}, | ||
| 11143 | {0x3000000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3000000}, | ||
| 11144 | {0x3000000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3000000}, | ||
| 11145 | {0x3000000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3000000}, | ||
| 11146 | {0x3000000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3000000}, | ||
| 11147 | {0x3000000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3000000}, | ||
| 11148 | {0x3000000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3000000}, | ||
| 11149 | {0x3000000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3000000}, | ||
| 11150 | {0x3000000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3000000}, | ||
| 11151 | {0x3000000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3000000}, | ||
| 11152 | {0x3000000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11153 | {0x3000000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11154 | {0x3000000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11155 | {0x3000000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11156 | {0x3000000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11157 | {0x3000000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11158 | {0x3000000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3000000}, | ||
| 11159 | {0x3000000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3000080}, | ||
| 11160 | {0x3000000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3000080}, | ||
| 11161 | {0x3000000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3000080}, | ||
| 11162 | {0x3000000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3000080}, | ||
| 11163 | {0x3000000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3000080}, | ||
| 11164 | {0x3000000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3000000}, | ||
| 11165 | {0x3000000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3000000}, | ||
| 11166 | {0x3000000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3000000}, | ||
| 11167 | {0x3000000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3000000}, | ||
| 11168 | {0x3000000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3000000}, | ||
| 11169 | {0x3000000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3000000}, | ||
| 11170 | {0x3000000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3000000}, | ||
| 11171 | {0x3000000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3000000}, | ||
| 11172 | {0x3000000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3000000}, | ||
| 11173 | {0x3000000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11174 | {0x3000000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11175 | {0x3000000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11176 | {0x3000000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11177 | {0x3000000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11178 | {0x3000000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11179 | {0x3000000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3000000}, | ||
| 11180 | {0x3000000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3000000}, | ||
| 11181 | {0x3000000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3000000}, | ||
| 11182 | {0x3000000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3000000}, | ||
| 11183 | {0x3000000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3000000}, | ||
| 11184 | {0x3000000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3000000}, | ||
| 11185 | {0x3000000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3000000}, | ||
| 11186 | {0x3000000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3000000}, | ||
| 11187 | {0x3000000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3000000}, | ||
| 11188 | {0x3000000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3000000}, | ||
| 11189 | {0x3000000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3000000}, | ||
| 11190 | {0x3000000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, | ||
| 11191 | {0x3000000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3000000}, | ||
| 11192 | {0x3000000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3000000}, | ||
| 11193 | {0x3000000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3000000}, | ||
| 11194 | {0x3000000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3000000}, | ||
| 11195 | {0x3000000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3000000}, | ||
| 11196 | {0x3000000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3000080}, | ||
| 11197 | {0x3000000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3000080}, | ||
| 11198 | {0x3000000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3000080}, | ||
| 11199 | {0x3000000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3000080}, | ||
| 11200 | {0x3000000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3000080}, | ||
| 11201 | {0x3000000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3000000}, | ||
| 11202 | {0x3000000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3000000}, | ||
| 11203 | {0x3000000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3000000}, | ||
| 11204 | {0x3000000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3000000}, | ||
| 11205 | {0x3000000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3000000}, | ||
| 11206 | {0x3000000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3000000}, | ||
| 11207 | {0x3000000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3000000}, | ||
| 11208 | {0x3000000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3000000}, | ||
| 11209 | {0x3000000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3000000}, | ||
| 11210 | {0x3000000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11211 | {0x3000000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11212 | {0x3000000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11213 | {0x3000000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11214 | {0x3000000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11215 | {0x3000000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11216 | {0x3000000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3000000}, | ||
| 11217 | {0x3000000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3000080}, | ||
| 11218 | {0x3000000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3000080}, | ||
| 11219 | {0x3000000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3000080}, | ||
| 11220 | {0x3000000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3000080}, | ||
| 11221 | {0x3000000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3000080}, | ||
| 11222 | {0x3000000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3000000}, | ||
| 11223 | {0x3000000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3000000}, | ||
| 11224 | {0x3000000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3000000}, | ||
| 11225 | {0x3000000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3000000}, | ||
| 11226 | {0x3000000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3000000}, | ||
| 11227 | {0x3000000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3000000}, | ||
| 11228 | {0x3000000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3000000}, | ||
| 11229 | {0x3000000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3000000}, | ||
| 11230 | {0x3000000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3000000}, | ||
| 11231 | {0x3000000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11232 | {0x3000000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11233 | {0x3000000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11234 | {0x3000000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11235 | {0x3000000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11236 | {0x3000000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11237 | {0x3000000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3000000}, | ||
| 11238 | {0x3000000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3000000}, | ||
| 11239 | {0x3000000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3000000}, | ||
| 11240 | {0x3000000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3000000}, | ||
| 11241 | {0x3000000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3000000}, | ||
| 11242 | {0x3000000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3000000}, | ||
| 11243 | {0x3000000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3000000}, | ||
| 11244 | {0x3000000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3000000}, | ||
| 11245 | {0x3000000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3000000}, | ||
| 11246 | {0x3000000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3000000}, | ||
| 11247 | {0x3000000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3000000}, | ||
| 11248 | {0x3000000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, | ||
| 11249 | {0x3000000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3000000}, | ||
| 11250 | {0x3000000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3000000}, | ||
| 11251 | {0x3000000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3000000}, | ||
| 11252 | {0x3000000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3000000}, | ||
| 11253 | {0x3000000, 0x7fffffff, 0x0, 0x7fc00000, 0x3000000}, | ||
| 11254 | {0x3000000, 0x7fffffff, 0x1, 0x7fc00000, 0x3000080}, | ||
| 11255 | {0x3000000, 0x7fffffff, 0x76, 0x7fc00000, 0x3000080}, | ||
| 11256 | {0x3000000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3000080}, | ||
| 11257 | {0x3000000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3000080}, | ||
| 11258 | {0x3000000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3000080}, | ||
| 11259 | {0x3000000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3000000}, | ||
| 11260 | {0x3000000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3000000}, | ||
| 11261 | {0x3000000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3000000}, | ||
| 11262 | {0x3000000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3000000}, | ||
| 11263 | {0x3000000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3000000}, | ||
| 11264 | {0x3000000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3000000}, | ||
| 11265 | {0x3000000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3000000}, | ||
| 11266 | {0x3000000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3000000}, | ||
| 11267 | {0x3000000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3000000}, | ||
| 11268 | {0x3000000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11269 | {0x3000000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11270 | {0x3000000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11271 | {0x3000000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11272 | {0x3000000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11273 | {0x3000000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11274 | {0x3000000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3000000}, | ||
| 11275 | {0x3000000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3000080}, | ||
| 11276 | {0x3000000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3000080}, | ||
| 11277 | {0x3000000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3000080}, | ||
| 11278 | {0x3000000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3000080}, | ||
| 11279 | {0x3000000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3000080}, | ||
| 11280 | {0x3000000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3000000}, | ||
| 11281 | {0x3000000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3000000}, | ||
| 11282 | {0x3000000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3000000}, | ||
| 11283 | {0x3000000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3000000}, | ||
| 11284 | {0x3000000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3000000}, | ||
| 11285 | {0x3000000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3000000}, | ||
| 11286 | {0x3000000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3000000}, | ||
| 11287 | {0x3000000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3000000}, | ||
| 11288 | {0x3000000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3000000}, | ||
| 11289 | {0x3000000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11290 | {0x3000000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11291 | {0x3000000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11292 | {0x3000000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11293 | {0x3000000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11294 | {0x3000000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11295 | {0x3000000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3000000}, | ||
| 11296 | {0x3000000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3000000}, | ||
| 11297 | {0x3000000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3000000}, | ||
| 11298 | {0x3000000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3000000}, | ||
| 11299 | {0x3000000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3000000}, | ||
| 11300 | {0x3000000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3000000}, | ||
| 11301 | {0x3000000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3000000}, | ||
| 11302 | {0x3000000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3000000}, | ||
| 11303 | {0x3000000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3000000}, | ||
| 11304 | {0x3000000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3000000}, | ||
| 11305 | {0x3000000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3000000}, | ||
| 11306 | {0x3000000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, | ||
| 11307 | {0x3000000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3000000}, | ||
| 11308 | {0x3000000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3000000}, | ||
| 11309 | {0x3000000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3000000}, | ||
| 11310 | {0x3000000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3000000}, | ||
| 11311 | {0x3000000, 0x80000000, 0x0, 0x0, 0x3000000}, | ||
| 11312 | {0x3000000, 0x80000000, 0x1, 0x0, 0x3000080}, | ||
| 11313 | {0x3000000, 0x80000000, 0x76, 0x0, 0x3000080}, | ||
| 11314 | {0x3000000, 0x80000000, 0x2b94, 0x0, 0x3000080}, | ||
| 11315 | {0x3000000, 0x80000000, 0x636d24, 0x0, 0x3000080}, | ||
| 11316 | {0x3000000, 0x80000000, 0x7fffff, 0x0, 0x3000080}, | ||
| 11317 | {0x3000000, 0x80000000, 0x800000, 0x800000, 0x3000000}, | ||
| 11318 | {0x3000000, 0x80000000, 0x800002, 0x800002, 0x3000000}, | ||
| 11319 | {0x3000000, 0x80000000, 0x1398437, 0x1398437, 0x3000000}, | ||
| 11320 | {0x3000000, 0x80000000, 0xba98d27, 0xba98d27, 0x3000000}, | ||
| 11321 | {0x3000000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3000000}, | ||
| 11322 | {0x3000000, 0x80000000, 0x751f853a, 0x751f853a, 0x3000000}, | ||
| 11323 | {0x3000000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3000000}, | ||
| 11324 | {0x3000000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3000000}, | ||
| 11325 | {0x3000000, 0x80000000, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 11326 | {0x3000000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11327 | {0x3000000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11328 | {0x3000000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11329 | {0x3000000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11330 | {0x3000000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11331 | {0x3000000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11332 | {0x3000000, 0x80000000, 0x80000000, 0x80000000, 0x3000000}, | ||
| 11333 | {0x3000000, 0x80000000, 0x80000001, 0x0, 0x3000080}, | ||
| 11334 | {0x3000000, 0x80000000, 0x80000076, 0x0, 0x3000080}, | ||
| 11335 | {0x3000000, 0x80000000, 0x80002b94, 0x0, 0x3000080}, | ||
| 11336 | {0x3000000, 0x80000000, 0x80636d24, 0x0, 0x3000080}, | ||
| 11337 | {0x3000000, 0x80000000, 0x807fffff, 0x0, 0x3000080}, | ||
| 11338 | {0x3000000, 0x80000000, 0x80800000, 0x80800000, 0x3000000}, | ||
| 11339 | {0x3000000, 0x80000000, 0x80800002, 0x80800002, 0x3000000}, | ||
| 11340 | {0x3000000, 0x80000000, 0x81398437, 0x81398437, 0x3000000}, | ||
| 11341 | {0x3000000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3000000}, | ||
| 11342 | {0x3000000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3000000}, | ||
| 11343 | {0x3000000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3000000}, | ||
| 11344 | {0x3000000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3000000}, | ||
| 11345 | {0x3000000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3000000}, | ||
| 11346 | {0x3000000, 0x80000000, 0xff800000, 0xff800000, 0x3000000}, | ||
| 11347 | {0x3000000, 0x80000000, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11348 | {0x3000000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11349 | {0x3000000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11350 | {0x3000000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11351 | {0x3000000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11352 | {0x3000000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11353 | {0x3000000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3000000}, | ||
| 11354 | {0x3000000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3000000}, | ||
| 11355 | {0x3000000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3000000}, | ||
| 11356 | {0x3000000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3000000}, | ||
| 11357 | {0x3000000, 0x80000000, 0x9503366, 0x9503366, 0x3000000}, | ||
| 11358 | {0x3000000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3000000}, | ||
| 11359 | {0x3000000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3000000}, | ||
| 11360 | {0x3000000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3000000}, | ||
| 11361 | {0x3000000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3000000}, | ||
| 11362 | {0x3000000, 0x80000000, 0x966320b, 0x966320b, 0x3000000}, | ||
| 11363 | {0x3000000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3000000}, | ||
| 11364 | {0x3000000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000000}, | ||
| 11365 | {0x3000000, 0x80000000, 0x317285d3, 0x317285d3, 0x3000000}, | ||
| 11366 | {0x3000000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3000000}, | ||
| 11367 | {0x3000000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3000000}, | ||
| 11368 | {0x3000000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3000000}, | ||
| 11369 | {0x3000000, 0x80000001, 0x0, 0x0, 0x3000080}, | ||
| 11370 | {0x3000000, 0x80000001, 0x1, 0x0, 0x3000080}, | ||
| 11371 | {0x3000000, 0x80000001, 0x76, 0x0, 0x3000080}, | ||
| 11372 | {0x3000000, 0x80000001, 0x2b94, 0x0, 0x3000080}, | ||
| 11373 | {0x3000000, 0x80000001, 0x636d24, 0x0, 0x3000080}, | ||
| 11374 | {0x3000000, 0x80000001, 0x7fffff, 0x0, 0x3000080}, | ||
| 11375 | {0x3000000, 0x80000001, 0x800000, 0x800000, 0x3000080}, | ||
| 11376 | {0x3000000, 0x80000001, 0x800002, 0x800002, 0x3000080}, | ||
| 11377 | {0x3000000, 0x80000001, 0x1398437, 0x1398437, 0x3000080}, | ||
| 11378 | {0x3000000, 0x80000001, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 11379 | {0x3000000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 11380 | {0x3000000, 0x80000001, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 11381 | {0x3000000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 11382 | {0x3000000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 11383 | {0x3000000, 0x80000001, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 11384 | {0x3000000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 11385 | {0x3000000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 11386 | {0x3000000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 11387 | {0x3000000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 11388 | {0x3000000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11389 | {0x3000000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 11390 | {0x3000000, 0x80000001, 0x80000000, 0x0, 0x3000080}, | ||
| 11391 | {0x3000000, 0x80000001, 0x80000001, 0x0, 0x3000080}, | ||
| 11392 | {0x3000000, 0x80000001, 0x80000076, 0x0, 0x3000080}, | ||
| 11393 | {0x3000000, 0x80000001, 0x80002b94, 0x0, 0x3000080}, | ||
| 11394 | {0x3000000, 0x80000001, 0x80636d24, 0x0, 0x3000080}, | ||
| 11395 | {0x3000000, 0x80000001, 0x807fffff, 0x0, 0x3000080}, | ||
| 11396 | {0x3000000, 0x80000001, 0x80800000, 0x80800000, 0x3000080}, | ||
| 11397 | {0x3000000, 0x80000001, 0x80800002, 0x80800002, 0x3000080}, | ||
| 11398 | {0x3000000, 0x80000001, 0x81398437, 0x81398437, 0x3000080}, | ||
| 11399 | {0x3000000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 11400 | {0x3000000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 11401 | {0x3000000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 11402 | {0x3000000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 11403 | {0x3000000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 11404 | {0x3000000, 0x80000001, 0xff800000, 0xff800000, 0x3000080}, | ||
| 11405 | {0x3000000, 0x80000001, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 11406 | {0x3000000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 11407 | {0x3000000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 11408 | {0x3000000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 11409 | {0x3000000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11410 | {0x3000000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 11411 | {0x3000000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 11412 | {0x3000000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 11413 | {0x3000000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 11414 | {0x3000000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 11415 | {0x3000000, 0x80000001, 0x9503366, 0x9503366, 0x3000080}, | ||
| 11416 | {0x3000000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 11417 | {0x3000000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 11418 | {0x3000000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 11419 | {0x3000000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 11420 | {0x3000000, 0x80000001, 0x966320b, 0x966320b, 0x3000080}, | ||
| 11421 | {0x3000000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 11422 | {0x3000000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 11423 | {0x3000000, 0x80000001, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 11424 | {0x3000000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 11425 | {0x3000000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 11426 | {0x3000000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 11427 | {0x3000000, 0x80000076, 0x0, 0x0, 0x3000080}, | ||
| 11428 | {0x3000000, 0x80000076, 0x1, 0x0, 0x3000080}, | ||
| 11429 | {0x3000000, 0x80000076, 0x76, 0x0, 0x3000080}, | ||
| 11430 | {0x3000000, 0x80000076, 0x2b94, 0x0, 0x3000080}, | ||
| 11431 | {0x3000000, 0x80000076, 0x636d24, 0x0, 0x3000080}, | ||
| 11432 | {0x3000000, 0x80000076, 0x7fffff, 0x0, 0x3000080}, | ||
| 11433 | {0x3000000, 0x80000076, 0x800000, 0x800000, 0x3000080}, | ||
| 11434 | {0x3000000, 0x80000076, 0x800002, 0x800002, 0x3000080}, | ||
| 11435 | {0x3000000, 0x80000076, 0x1398437, 0x1398437, 0x3000080}, | ||
| 11436 | {0x3000000, 0x80000076, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 11437 | {0x3000000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 11438 | {0x3000000, 0x80000076, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 11439 | {0x3000000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 11440 | {0x3000000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 11441 | {0x3000000, 0x80000076, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 11442 | {0x3000000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 11443 | {0x3000000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 11444 | {0x3000000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 11445 | {0x3000000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 11446 | {0x3000000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11447 | {0x3000000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 11448 | {0x3000000, 0x80000076, 0x80000000, 0x0, 0x3000080}, | ||
| 11449 | {0x3000000, 0x80000076, 0x80000001, 0x0, 0x3000080}, | ||
| 11450 | {0x3000000, 0x80000076, 0x80000076, 0x0, 0x3000080}, | ||
| 11451 | {0x3000000, 0x80000076, 0x80002b94, 0x0, 0x3000080}, | ||
| 11452 | {0x3000000, 0x80000076, 0x80636d24, 0x0, 0x3000080}, | ||
| 11453 | {0x3000000, 0x80000076, 0x807fffff, 0x0, 0x3000080}, | ||
| 11454 | {0x3000000, 0x80000076, 0x80800000, 0x80800000, 0x3000080}, | ||
| 11455 | {0x3000000, 0x80000076, 0x80800002, 0x80800002, 0x3000080}, | ||
| 11456 | {0x3000000, 0x80000076, 0x81398437, 0x81398437, 0x3000080}, | ||
| 11457 | {0x3000000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 11458 | {0x3000000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 11459 | {0x3000000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 11460 | {0x3000000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 11461 | {0x3000000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 11462 | {0x3000000, 0x80000076, 0xff800000, 0xff800000, 0x3000080}, | ||
| 11463 | {0x3000000, 0x80000076, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 11464 | {0x3000000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 11465 | {0x3000000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 11466 | {0x3000000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 11467 | {0x3000000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11468 | {0x3000000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 11469 | {0x3000000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 11470 | {0x3000000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 11471 | {0x3000000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 11472 | {0x3000000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 11473 | {0x3000000, 0x80000076, 0x9503366, 0x9503366, 0x3000080}, | ||
| 11474 | {0x3000000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 11475 | {0x3000000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 11476 | {0x3000000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 11477 | {0x3000000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 11478 | {0x3000000, 0x80000076, 0x966320b, 0x966320b, 0x3000080}, | ||
| 11479 | {0x3000000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 11480 | {0x3000000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 11481 | {0x3000000, 0x80000076, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 11482 | {0x3000000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 11483 | {0x3000000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 11484 | {0x3000000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 11485 | {0x3000000, 0x80002b94, 0x0, 0x0, 0x3000080}, | ||
| 11486 | {0x3000000, 0x80002b94, 0x1, 0x0, 0x3000080}, | ||
| 11487 | {0x3000000, 0x80002b94, 0x76, 0x0, 0x3000080}, | ||
| 11488 | {0x3000000, 0x80002b94, 0x2b94, 0x0, 0x3000080}, | ||
| 11489 | {0x3000000, 0x80002b94, 0x636d24, 0x0, 0x3000080}, | ||
| 11490 | {0x3000000, 0x80002b94, 0x7fffff, 0x0, 0x3000080}, | ||
| 11491 | {0x3000000, 0x80002b94, 0x800000, 0x800000, 0x3000080}, | ||
| 11492 | {0x3000000, 0x80002b94, 0x800002, 0x800002, 0x3000080}, | ||
| 11493 | {0x3000000, 0x80002b94, 0x1398437, 0x1398437, 0x3000080}, | ||
| 11494 | {0x3000000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 11495 | {0x3000000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 11496 | {0x3000000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 11497 | {0x3000000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 11498 | {0x3000000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 11499 | {0x3000000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 11500 | {0x3000000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 11501 | {0x3000000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 11502 | {0x3000000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 11503 | {0x3000000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 11504 | {0x3000000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11505 | {0x3000000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 11506 | {0x3000000, 0x80002b94, 0x80000000, 0x0, 0x3000080}, | ||
| 11507 | {0x3000000, 0x80002b94, 0x80000001, 0x0, 0x3000080}, | ||
| 11508 | {0x3000000, 0x80002b94, 0x80000076, 0x0, 0x3000080}, | ||
| 11509 | {0x3000000, 0x80002b94, 0x80002b94, 0x0, 0x3000080}, | ||
| 11510 | {0x3000000, 0x80002b94, 0x80636d24, 0x0, 0x3000080}, | ||
| 11511 | {0x3000000, 0x80002b94, 0x807fffff, 0x0, 0x3000080}, | ||
| 11512 | {0x3000000, 0x80002b94, 0x80800000, 0x80800000, 0x3000080}, | ||
| 11513 | {0x3000000, 0x80002b94, 0x80800002, 0x80800002, 0x3000080}, | ||
| 11514 | {0x3000000, 0x80002b94, 0x81398437, 0x81398437, 0x3000080}, | ||
| 11515 | {0x3000000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 11516 | {0x3000000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 11517 | {0x3000000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 11518 | {0x3000000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 11519 | {0x3000000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 11520 | {0x3000000, 0x80002b94, 0xff800000, 0xff800000, 0x3000080}, | ||
| 11521 | {0x3000000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 11522 | {0x3000000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 11523 | {0x3000000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 11524 | {0x3000000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 11525 | {0x3000000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11526 | {0x3000000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 11527 | {0x3000000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 11528 | {0x3000000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 11529 | {0x3000000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 11530 | {0x3000000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 11531 | {0x3000000, 0x80002b94, 0x9503366, 0x9503366, 0x3000080}, | ||
| 11532 | {0x3000000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 11533 | {0x3000000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 11534 | {0x3000000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 11535 | {0x3000000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 11536 | {0x3000000, 0x80002b94, 0x966320b, 0x966320b, 0x3000080}, | ||
| 11537 | {0x3000000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 11538 | {0x3000000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 11539 | {0x3000000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 11540 | {0x3000000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 11541 | {0x3000000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 11542 | {0x3000000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 11543 | {0x3000000, 0x80636d24, 0x0, 0x0, 0x3000080}, | ||
| 11544 | {0x3000000, 0x80636d24, 0x1, 0x0, 0x3000080}, | ||
| 11545 | {0x3000000, 0x80636d24, 0x76, 0x0, 0x3000080}, | ||
| 11546 | {0x3000000, 0x80636d24, 0x2b94, 0x0, 0x3000080}, | ||
| 11547 | {0x3000000, 0x80636d24, 0x636d24, 0x0, 0x3000080}, | ||
| 11548 | {0x3000000, 0x80636d24, 0x7fffff, 0x0, 0x3000080}, | ||
| 11549 | {0x3000000, 0x80636d24, 0x800000, 0x800000, 0x3000080}, | ||
| 11550 | {0x3000000, 0x80636d24, 0x800002, 0x800002, 0x3000080}, | ||
| 11551 | {0x3000000, 0x80636d24, 0x1398437, 0x1398437, 0x3000080}, | ||
| 11552 | {0x3000000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 11553 | {0x3000000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 11554 | {0x3000000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 11555 | {0x3000000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 11556 | {0x3000000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 11557 | {0x3000000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 11558 | {0x3000000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 11559 | {0x3000000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 11560 | {0x3000000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 11561 | {0x3000000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 11562 | {0x3000000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11563 | {0x3000000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 11564 | {0x3000000, 0x80636d24, 0x80000000, 0x0, 0x3000080}, | ||
| 11565 | {0x3000000, 0x80636d24, 0x80000001, 0x0, 0x3000080}, | ||
| 11566 | {0x3000000, 0x80636d24, 0x80000076, 0x0, 0x3000080}, | ||
| 11567 | {0x3000000, 0x80636d24, 0x80002b94, 0x0, 0x3000080}, | ||
| 11568 | {0x3000000, 0x80636d24, 0x80636d24, 0x0, 0x3000080}, | ||
| 11569 | {0x3000000, 0x80636d24, 0x807fffff, 0x0, 0x3000080}, | ||
| 11570 | {0x3000000, 0x80636d24, 0x80800000, 0x80800000, 0x3000080}, | ||
| 11571 | {0x3000000, 0x80636d24, 0x80800002, 0x80800002, 0x3000080}, | ||
| 11572 | {0x3000000, 0x80636d24, 0x81398437, 0x81398437, 0x3000080}, | ||
| 11573 | {0x3000000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 11574 | {0x3000000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 11575 | {0x3000000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 11576 | {0x3000000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 11577 | {0x3000000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 11578 | {0x3000000, 0x80636d24, 0xff800000, 0xff800000, 0x3000080}, | ||
| 11579 | {0x3000000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 11580 | {0x3000000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 11581 | {0x3000000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 11582 | {0x3000000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 11583 | {0x3000000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11584 | {0x3000000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 11585 | {0x3000000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 11586 | {0x3000000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 11587 | {0x3000000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 11588 | {0x3000000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 11589 | {0x3000000, 0x80636d24, 0x9503366, 0x9503366, 0x3000080}, | ||
| 11590 | {0x3000000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 11591 | {0x3000000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 11592 | {0x3000000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 11593 | {0x3000000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 11594 | {0x3000000, 0x80636d24, 0x966320b, 0x966320b, 0x3000080}, | ||
| 11595 | {0x3000000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 11596 | {0x3000000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 11597 | {0x3000000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 11598 | {0x3000000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 11599 | {0x3000000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 11600 | {0x3000000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 11601 | {0x3000000, 0x807fffff, 0x0, 0x0, 0x3000080}, | ||
| 11602 | {0x3000000, 0x807fffff, 0x1, 0x0, 0x3000080}, | ||
| 11603 | {0x3000000, 0x807fffff, 0x76, 0x0, 0x3000080}, | ||
| 11604 | {0x3000000, 0x807fffff, 0x2b94, 0x0, 0x3000080}, | ||
| 11605 | {0x3000000, 0x807fffff, 0x636d24, 0x0, 0x3000080}, | ||
| 11606 | {0x3000000, 0x807fffff, 0x7fffff, 0x0, 0x3000080}, | ||
| 11607 | {0x3000000, 0x807fffff, 0x800000, 0x800000, 0x3000080}, | ||
| 11608 | {0x3000000, 0x807fffff, 0x800002, 0x800002, 0x3000080}, | ||
| 11609 | {0x3000000, 0x807fffff, 0x1398437, 0x1398437, 0x3000080}, | ||
| 11610 | {0x3000000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3000080}, | ||
| 11611 | {0x3000000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3000080}, | ||
| 11612 | {0x3000000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3000080}, | ||
| 11613 | {0x3000000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, | ||
| 11614 | {0x3000000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3000080}, | ||
| 11615 | {0x3000000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3000080}, | ||
| 11616 | {0x3000000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3000081}, | ||
| 11617 | {0x3000000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3000081}, | ||
| 11618 | {0x3000000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3000081}, | ||
| 11619 | {0x3000000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3000080}, | ||
| 11620 | {0x3000000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11621 | {0x3000000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3000080}, | ||
| 11622 | {0x3000000, 0x807fffff, 0x80000000, 0x0, 0x3000080}, | ||
| 11623 | {0x3000000, 0x807fffff, 0x80000001, 0x0, 0x3000080}, | ||
| 11624 | {0x3000000, 0x807fffff, 0x80000076, 0x0, 0x3000080}, | ||
| 11625 | {0x3000000, 0x807fffff, 0x80002b94, 0x0, 0x3000080}, | ||
| 11626 | {0x3000000, 0x807fffff, 0x80636d24, 0x0, 0x3000080}, | ||
| 11627 | {0x3000000, 0x807fffff, 0x807fffff, 0x0, 0x3000080}, | ||
| 11628 | {0x3000000, 0x807fffff, 0x80800000, 0x80800000, 0x3000080}, | ||
| 11629 | {0x3000000, 0x807fffff, 0x80800002, 0x80800002, 0x3000080}, | ||
| 11630 | {0x3000000, 0x807fffff, 0x81398437, 0x81398437, 0x3000080}, | ||
| 11631 | {0x3000000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3000080}, | ||
| 11632 | {0x3000000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, | ||
| 11633 | {0x3000000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3000080}, | ||
| 11634 | {0x3000000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3000080}, | ||
| 11635 | {0x3000000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3000080}, | ||
| 11636 | {0x3000000, 0x807fffff, 0xff800000, 0xff800000, 0x3000080}, | ||
| 11637 | {0x3000000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3000081}, | ||
| 11638 | {0x3000000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3000081}, | ||
| 11639 | {0x3000000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3000081}, | ||
| 11640 | {0x3000000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3000080}, | ||
| 11641 | {0x3000000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3000080}, | ||
| 11642 | {0x3000000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3000080}, | ||
| 11643 | {0x3000000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3000080}, | ||
| 11644 | {0x3000000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3000080}, | ||
| 11645 | {0x3000000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3000080}, | ||
| 11646 | {0x3000000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3000080}, | ||
| 11647 | {0x3000000, 0x807fffff, 0x9503366, 0x9503366, 0x3000080}, | ||
| 11648 | {0x3000000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, | ||
| 11649 | {0x3000000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, | ||
| 11650 | {0x3000000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3000080}, | ||
| 11651 | {0x3000000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, | ||
| 11652 | {0x3000000, 0x807fffff, 0x966320b, 0x966320b, 0x3000080}, | ||
| 11653 | {0x3000000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3000080}, | ||
| 11654 | {0x3000000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, | ||
| 11655 | {0x3000000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3000080}, | ||
| 11656 | {0x3000000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3000080}, | ||
| 11657 | {0x3000000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, | ||
| 11658 | {0x3000000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3000080}, | ||
| 11659 | {0x3000000, 0x80800000, 0x0, 0x80800000, 0x3000000}, | ||
| 11660 | {0x3000000, 0x80800000, 0x1, 0x80800000, 0x3000080}, | ||
| 11661 | {0x3000000, 0x80800000, 0x76, 0x80800000, 0x3000080}, | ||
| 11662 | {0x3000000, 0x80800000, 0x2b94, 0x80800000, 0x3000080}, | ||
| 11663 | {0x3000000, 0x80800000, 0x636d24, 0x80800000, 0x3000080}, | ||
| 11664 | {0x3000000, 0x80800000, 0x7fffff, 0x80800000, 0x3000080}, | ||
| 11665 | {0x3000000, 0x80800000, 0x800000, 0x0, 0x3000000}, | ||
| 11666 | {0x3000000, 0x80800000, 0x800002, 0x0, 0x3000008}, | ||
| 11667 | {0x3000000, 0x80800000, 0x1398437, 0xf3086e, 0x3000000}, | ||
| 11668 | {0x3000000, 0x80800000, 0xba98d27, 0xba98d25, 0x3000000}, | ||
| 11669 | {0x3000000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3000000}, | ||
| 11670 | {0x3000000, 0x80800000, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 11671 | {0x3000000, 0x80800000, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 11672 | {0x3000000, 0x80800000, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 11673 | {0x3000000, 0x80800000, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 11674 | {0x3000000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11675 | {0x3000000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11676 | {0x3000000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11677 | {0x3000000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11678 | {0x3000000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11679 | {0x3000000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11680 | {0x3000000, 0x80800000, 0x80000000, 0x80800000, 0x3000000}, | ||
| 11681 | {0x3000000, 0x80800000, 0x80000001, 0x80800000, 0x3000080}, | ||
| 11682 | {0x3000000, 0x80800000, 0x80000076, 0x80800000, 0x3000080}, | ||
| 11683 | {0x3000000, 0x80800000, 0x80002b94, 0x80800000, 0x3000080}, | ||
| 11684 | {0x3000000, 0x80800000, 0x80636d24, 0x80800000, 0x3000080}, | ||
| 11685 | {0x3000000, 0x80800000, 0x807fffff, 0x80800000, 0x3000080}, | ||
| 11686 | {0x3000000, 0x80800000, 0x80800000, 0x81000000, 0x3000000}, | ||
| 11687 | {0x3000000, 0x80800000, 0x80800002, 0x81000001, 0x3000000}, | ||
| 11688 | {0x3000000, 0x80800000, 0x81398437, 0x81798437, 0x3000000}, | ||
| 11689 | {0x3000000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3000000}, | ||
| 11690 | {0x3000000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3000000}, | ||
| 11691 | {0x3000000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 11692 | {0x3000000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 11693 | {0x3000000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 11694 | {0x3000000, 0x80800000, 0xff800000, 0xff800000, 0x3000000}, | ||
| 11695 | {0x3000000, 0x80800000, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11696 | {0x3000000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11697 | {0x3000000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11698 | {0x3000000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11699 | {0x3000000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11700 | {0x3000000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11701 | {0x3000000, 0x80800000, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 11702 | {0x3000000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 11703 | {0x3000000, 0x80800000, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 11704 | {0x3000000, 0x80800000, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 11705 | {0x3000000, 0x80800000, 0x9503366, 0x9503326, 0x3000000}, | ||
| 11706 | {0x3000000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 11707 | {0x3000000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 11708 | {0x3000000, 0x80800000, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 11709 | {0x3000000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 11710 | {0x3000000, 0x80800000, 0x966320b, 0x96631cb, 0x3000000}, | ||
| 11711 | {0x3000000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 11712 | {0x3000000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 11713 | {0x3000000, 0x80800000, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 11714 | {0x3000000, 0x80800000, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 11715 | {0x3000000, 0x80800000, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 11716 | {0x3000000, 0x80800000, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 11717 | {0x3000000, 0x80800002, 0x0, 0x80800002, 0x3000000}, | ||
| 11718 | {0x3000000, 0x80800002, 0x1, 0x80800002, 0x3000080}, | ||
| 11719 | {0x3000000, 0x80800002, 0x76, 0x80800002, 0x3000080}, | ||
| 11720 | {0x3000000, 0x80800002, 0x2b94, 0x80800002, 0x3000080}, | ||
| 11721 | {0x3000000, 0x80800002, 0x636d24, 0x80800002, 0x3000080}, | ||
| 11722 | {0x3000000, 0x80800002, 0x7fffff, 0x80800002, 0x3000080}, | ||
| 11723 | {0x3000000, 0x80800002, 0x800000, 0x0, 0x3000008}, | ||
| 11724 | {0x3000000, 0x80800002, 0x800002, 0x0, 0x3000000}, | ||
| 11725 | {0x3000000, 0x80800002, 0x1398437, 0xf3086c, 0x3000000}, | ||
| 11726 | {0x3000000, 0x80800002, 0xba98d27, 0xba98d25, 0x3000010}, | ||
| 11727 | {0x3000000, 0x80800002, 0xba98d7a, 0xba98d78, 0x3000010}, | ||
| 11728 | {0x3000000, 0x80800002, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 11729 | {0x3000000, 0x80800002, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 11730 | {0x3000000, 0x80800002, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 11731 | {0x3000000, 0x80800002, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 11732 | {0x3000000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11733 | {0x3000000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11734 | {0x3000000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11735 | {0x3000000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11736 | {0x3000000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11737 | {0x3000000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11738 | {0x3000000, 0x80800002, 0x80000000, 0x80800002, 0x3000000}, | ||
| 11739 | {0x3000000, 0x80800002, 0x80000001, 0x80800002, 0x3000080}, | ||
| 11740 | {0x3000000, 0x80800002, 0x80000076, 0x80800002, 0x3000080}, | ||
| 11741 | {0x3000000, 0x80800002, 0x80002b94, 0x80800002, 0x3000080}, | ||
| 11742 | {0x3000000, 0x80800002, 0x80636d24, 0x80800002, 0x3000080}, | ||
| 11743 | {0x3000000, 0x80800002, 0x807fffff, 0x80800002, 0x3000080}, | ||
| 11744 | {0x3000000, 0x80800002, 0x80800000, 0x81000001, 0x3000000}, | ||
| 11745 | {0x3000000, 0x80800002, 0x80800002, 0x81000002, 0x3000000}, | ||
| 11746 | {0x3000000, 0x80800002, 0x81398437, 0x81798438, 0x3000000}, | ||
| 11747 | {0x3000000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3000010}, | ||
| 11748 | {0x3000000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3000010}, | ||
| 11749 | {0x3000000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 11750 | {0x3000000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 11751 | {0x3000000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 11752 | {0x3000000, 0x80800002, 0xff800000, 0xff800000, 0x3000000}, | ||
| 11753 | {0x3000000, 0x80800002, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11754 | {0x3000000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11755 | {0x3000000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11756 | {0x3000000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11757 | {0x3000000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11758 | {0x3000000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11759 | {0x3000000, 0x80800002, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 11760 | {0x3000000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 11761 | {0x3000000, 0x80800002, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 11762 | {0x3000000, 0x80800002, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 11763 | {0x3000000, 0x80800002, 0x9503366, 0x9503326, 0x3000010}, | ||
| 11764 | {0x3000000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 11765 | {0x3000000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 11766 | {0x3000000, 0x80800002, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 11767 | {0x3000000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 11768 | {0x3000000, 0x80800002, 0x966320b, 0x96631cb, 0x3000010}, | ||
| 11769 | {0x3000000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 11770 | {0x3000000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 11771 | {0x3000000, 0x80800002, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 11772 | {0x3000000, 0x80800002, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 11773 | {0x3000000, 0x80800002, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 11774 | {0x3000000, 0x80800002, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 11775 | {0x3000000, 0x81398437, 0x0, 0x81398437, 0x3000000}, | ||
| 11776 | {0x3000000, 0x81398437, 0x1, 0x81398437, 0x3000080}, | ||
| 11777 | {0x3000000, 0x81398437, 0x76, 0x81398437, 0x3000080}, | ||
| 11778 | {0x3000000, 0x81398437, 0x2b94, 0x81398437, 0x3000080}, | ||
| 11779 | {0x3000000, 0x81398437, 0x636d24, 0x81398437, 0x3000080}, | ||
| 11780 | {0x3000000, 0x81398437, 0x7fffff, 0x81398437, 0x3000080}, | ||
| 11781 | {0x3000000, 0x81398437, 0x800000, 0x80f3086e, 0x3000000}, | ||
| 11782 | {0x3000000, 0x81398437, 0x800002, 0x80f3086c, 0x3000000}, | ||
| 11783 | {0x3000000, 0x81398437, 0x1398437, 0x0, 0x3000000}, | ||
| 11784 | {0x3000000, 0x81398437, 0xba98d27, 0xba98d21, 0x3000010}, | ||
| 11785 | {0x3000000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3000010}, | ||
| 11786 | {0x3000000, 0x81398437, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 11787 | {0x3000000, 0x81398437, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 11788 | {0x3000000, 0x81398437, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 11789 | {0x3000000, 0x81398437, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 11790 | {0x3000000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11791 | {0x3000000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11792 | {0x3000000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11793 | {0x3000000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11794 | {0x3000000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11795 | {0x3000000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11796 | {0x3000000, 0x81398437, 0x80000000, 0x81398437, 0x3000000}, | ||
| 11797 | {0x3000000, 0x81398437, 0x80000001, 0x81398437, 0x3000080}, | ||
| 11798 | {0x3000000, 0x81398437, 0x80000076, 0x81398437, 0x3000080}, | ||
| 11799 | {0x3000000, 0x81398437, 0x80002b94, 0x81398437, 0x3000080}, | ||
| 11800 | {0x3000000, 0x81398437, 0x80636d24, 0x81398437, 0x3000080}, | ||
| 11801 | {0x3000000, 0x81398437, 0x807fffff, 0x81398437, 0x3000080}, | ||
| 11802 | {0x3000000, 0x81398437, 0x80800000, 0x81798437, 0x3000000}, | ||
| 11803 | {0x3000000, 0x81398437, 0x80800002, 0x81798438, 0x3000000}, | ||
| 11804 | {0x3000000, 0x81398437, 0x81398437, 0x81b98437, 0x3000000}, | ||
| 11805 | {0x3000000, 0x81398437, 0x8ba98d27, 0x8ba98d2d, 0x3000010}, | ||
| 11806 | {0x3000000, 0x81398437, 0x8ba98d7a, 0x8ba98d80, 0x3000010}, | ||
| 11807 | {0x3000000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 11808 | {0x3000000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 11809 | {0x3000000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 11810 | {0x3000000, 0x81398437, 0xff800000, 0xff800000, 0x3000000}, | ||
| 11811 | {0x3000000, 0x81398437, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11812 | {0x3000000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11813 | {0x3000000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11814 | {0x3000000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11815 | {0x3000000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11816 | {0x3000000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11817 | {0x3000000, 0x81398437, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 11818 | {0x3000000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 11819 | {0x3000000, 0x81398437, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 11820 | {0x3000000, 0x81398437, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 11821 | {0x3000000, 0x81398437, 0x9503366, 0x95032ac, 0x3000010}, | ||
| 11822 | {0x3000000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 11823 | {0x3000000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 11824 | {0x3000000, 0x81398437, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 11825 | {0x3000000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 11826 | {0x3000000, 0x81398437, 0x966320b, 0x9663151, 0x3000010}, | ||
| 11827 | {0x3000000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 11828 | {0x3000000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 11829 | {0x3000000, 0x81398437, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 11830 | {0x3000000, 0x81398437, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 11831 | {0x3000000, 0x81398437, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 11832 | {0x3000000, 0x81398437, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 11833 | {0x3000000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3000000}, | ||
| 11834 | {0x3000000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3000080}, | ||
| 11835 | {0x3000000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3000080}, | ||
| 11836 | {0x3000000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3000080}, | ||
| 11837 | {0x3000000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3000080}, | ||
| 11838 | {0x3000000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3000080}, | ||
| 11839 | {0x3000000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3000000}, | ||
| 11840 | {0x3000000, 0x8ba98d27, 0x800002, 0x8ba98d25, 0x3000010}, | ||
| 11841 | {0x3000000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3000010}, | ||
| 11842 | {0x3000000, 0x8ba98d27, 0xba98d27, 0x0, 0x3000000}, | ||
| 11843 | {0x3000000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3000000}, | ||
| 11844 | {0x3000000, 0x8ba98d27, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 11845 | {0x3000000, 0x8ba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 11846 | {0x3000000, 0x8ba98d27, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 11847 | {0x3000000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 11848 | {0x3000000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11849 | {0x3000000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11850 | {0x3000000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11851 | {0x3000000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11852 | {0x3000000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11853 | {0x3000000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11854 | {0x3000000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3000000}, | ||
| 11855 | {0x3000000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3000080}, | ||
| 11856 | {0x3000000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3000080}, | ||
| 11857 | {0x3000000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3000080}, | ||
| 11858 | {0x3000000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3000080}, | ||
| 11859 | {0x3000000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3000080}, | ||
| 11860 | {0x3000000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3000000}, | ||
| 11861 | {0x3000000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3000010}, | ||
| 11862 | {0x3000000, 0x8ba98d27, 0x81398437, 0x8ba98d2d, 0x3000010}, | ||
| 11863 | {0x3000000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3000000}, | ||
| 11864 | {0x3000000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3000010}, | ||
| 11865 | {0x3000000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 11866 | {0x3000000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 11867 | {0x3000000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 11868 | {0x3000000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3000000}, | ||
| 11869 | {0x3000000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11870 | {0x3000000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11871 | {0x3000000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11872 | {0x3000000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11873 | {0x3000000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11874 | {0x3000000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11875 | {0x3000000, 0x8ba98d27, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 11876 | {0x3000000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 11877 | {0x3000000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 11878 | {0x3000000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 11879 | {0x3000000, 0x8ba98d27, 0x9503366, 0x8ba30b8c, 0x3000010}, | ||
| 11880 | {0x3000000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 11881 | {0x3000000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 11882 | {0x3000000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 11883 | {0x3000000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 11884 | {0x3000000, 0x8ba98d27, 0x966320b, 0x8ba25b97, 0x3000010}, | ||
| 11885 | {0x3000000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 11886 | {0x3000000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 11887 | {0x3000000, 0x8ba98d27, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 11888 | {0x3000000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 11889 | {0x3000000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 11890 | {0x3000000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 11891 | {0x3000000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3000000}, | ||
| 11892 | {0x3000000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3000080}, | ||
| 11893 | {0x3000000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3000080}, | ||
| 11894 | {0x3000000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3000080}, | ||
| 11895 | {0x3000000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3000080}, | ||
| 11896 | {0x3000000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3000080}, | ||
| 11897 | {0x3000000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3000000}, | ||
| 11898 | {0x3000000, 0x8ba98d7a, 0x800002, 0x8ba98d78, 0x3000010}, | ||
| 11899 | {0x3000000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3000010}, | ||
| 11900 | {0x3000000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3000000}, | ||
| 11901 | {0x3000000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3000000}, | ||
| 11902 | {0x3000000, 0x8ba98d7a, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 11903 | {0x3000000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 11904 | {0x3000000, 0x8ba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 11905 | {0x3000000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 11906 | {0x3000000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11907 | {0x3000000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11908 | {0x3000000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11909 | {0x3000000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11910 | {0x3000000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11911 | {0x3000000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11912 | {0x3000000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3000000}, | ||
| 11913 | {0x3000000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3000080}, | ||
| 11914 | {0x3000000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3000080}, | ||
| 11915 | {0x3000000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3000080}, | ||
| 11916 | {0x3000000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3000080}, | ||
| 11917 | {0x3000000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3000080}, | ||
| 11918 | {0x3000000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3000000}, | ||
| 11919 | {0x3000000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3000010}, | ||
| 11920 | {0x3000000, 0x8ba98d7a, 0x81398437, 0x8ba98d80, 0x3000010}, | ||
| 11921 | {0x3000000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3000010}, | ||
| 11922 | {0x3000000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3000000}, | ||
| 11923 | {0x3000000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 11924 | {0x3000000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 11925 | {0x3000000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 11926 | {0x3000000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3000000}, | ||
| 11927 | {0x3000000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11928 | {0x3000000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11929 | {0x3000000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11930 | {0x3000000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11931 | {0x3000000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11932 | {0x3000000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11933 | {0x3000000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 11934 | {0x3000000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 11935 | {0x3000000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 11936 | {0x3000000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 11937 | {0x3000000, 0x8ba98d7a, 0x9503366, 0x8ba30bdf, 0x3000010}, | ||
| 11938 | {0x3000000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 11939 | {0x3000000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 11940 | {0x3000000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 11941 | {0x3000000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 11942 | {0x3000000, 0x8ba98d7a, 0x966320b, 0x8ba25bea, 0x3000010}, | ||
| 11943 | {0x3000000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 11944 | {0x3000000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 11945 | {0x3000000, 0x8ba98d7a, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 11946 | {0x3000000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 11947 | {0x3000000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 11948 | {0x3000000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 11949 | {0x3000000, 0xf51f853a, 0x0, 0xf51f853a, 0x3000000}, | ||
| 11950 | {0x3000000, 0xf51f853a, 0x1, 0xf51f853a, 0x3000080}, | ||
| 11951 | {0x3000000, 0xf51f853a, 0x76, 0xf51f853a, 0x3000080}, | ||
| 11952 | {0x3000000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3000080}, | ||
| 11953 | {0x3000000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3000080}, | ||
| 11954 | {0x3000000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3000080}, | ||
| 11955 | {0x3000000, 0xf51f853a, 0x800000, 0xf51f853a, 0x3000010}, | ||
| 11956 | {0x3000000, 0xf51f853a, 0x800002, 0xf51f853a, 0x3000010}, | ||
| 11957 | {0x3000000, 0xf51f853a, 0x1398437, 0xf51f853a, 0x3000010}, | ||
| 11958 | {0x3000000, 0xf51f853a, 0xba98d27, 0xf51f853a, 0x3000010}, | ||
| 11959 | {0x3000000, 0xf51f853a, 0xba98d7a, 0xf51f853a, 0x3000010}, | ||
| 11960 | {0x3000000, 0xf51f853a, 0x751f853a, 0x0, 0x3000000}, | ||
| 11961 | {0x3000000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3000010}, | ||
| 11962 | {0x3000000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3000010}, | ||
| 11963 | {0x3000000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 11964 | {0x3000000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 11965 | {0x3000000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 11966 | {0x3000000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 11967 | {0x3000000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 11968 | {0x3000000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11969 | {0x3000000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 11970 | {0x3000000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3000000}, | ||
| 11971 | {0x3000000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3000080}, | ||
| 11972 | {0x3000000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3000080}, | ||
| 11973 | {0x3000000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3000080}, | ||
| 11974 | {0x3000000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3000080}, | ||
| 11975 | {0x3000000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3000080}, | ||
| 11976 | {0x3000000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3000010}, | ||
| 11977 | {0x3000000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3000010}, | ||
| 11978 | {0x3000000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3000010}, | ||
| 11979 | {0x3000000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3000010}, | ||
| 11980 | {0x3000000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3000010}, | ||
| 11981 | {0x3000000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3000000}, | ||
| 11982 | {0x3000000, 0xf51f853a, 0xff7ffff0, 0xff7ffffa, 0x3000010}, | ||
| 11983 | {0x3000000, 0xf51f853a, 0xff7fffff, 0xff800000, 0x3000014}, | ||
| 11984 | {0x3000000, 0xf51f853a, 0xff800000, 0xff800000, 0x3000000}, | ||
| 11985 | {0x3000000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 11986 | {0x3000000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 11987 | {0x3000000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 11988 | {0x3000000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 11989 | {0x3000000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 11990 | {0x3000000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 11991 | {0x3000000, 0xf51f853a, 0x4f3495cb, 0xf51f853a, 0x3000010}, | ||
| 11992 | {0x3000000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3000010}, | ||
| 11993 | {0x3000000, 0xf51f853a, 0x7c994e9e, 0x7c994d5f, 0x3000010}, | ||
| 11994 | {0x3000000, 0xf51f853a, 0x6164bd6c, 0xf51f853a, 0x3000010}, | ||
| 11995 | {0x3000000, 0xf51f853a, 0x9503366, 0xf51f853a, 0x3000010}, | ||
| 11996 | {0x3000000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3000010}, | ||
| 11997 | {0x3000000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3000010}, | ||
| 11998 | {0x3000000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3000010}, | ||
| 11999 | {0x3000000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3000010}, | ||
| 12000 | {0x3000000, 0xf51f853a, 0x966320b, 0xf51f853a, 0x3000010}, | ||
| 12001 | {0x3000000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3000010}, | ||
| 12002 | {0x3000000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3000010}, | ||
| 12003 | {0x3000000, 0xf51f853a, 0x317285d3, 0xf51f853a, 0x3000010}, | ||
| 12004 | {0x3000000, 0xf51f853a, 0x3c9623b1, 0xf51f853a, 0x3000010}, | ||
| 12005 | {0x3000000, 0xf51f853a, 0x51fd2c7c, 0xf51f853a, 0x3000010}, | ||
| 12006 | {0x3000000, 0xf51f853a, 0x7b906a6c, 0x7b906570, 0x3000010}, | ||
| 12007 | {0x3000000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3000000}, | ||
| 12008 | {0x3000000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3000080}, | ||
| 12009 | {0x3000000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3000080}, | ||
| 12010 | {0x3000000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3000080}, | ||
| 12011 | {0x3000000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3000080}, | ||
| 12012 | {0x3000000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3000080}, | ||
| 12013 | {0x3000000, 0xff7ffff0, 0x800000, 0xff7ffff0, 0x3000010}, | ||
| 12014 | {0x3000000, 0xff7ffff0, 0x800002, 0xff7ffff0, 0x3000010}, | ||
| 12015 | {0x3000000, 0xff7ffff0, 0x1398437, 0xff7ffff0, 0x3000010}, | ||
| 12016 | {0x3000000, 0xff7ffff0, 0xba98d27, 0xff7ffff0, 0x3000010}, | ||
| 12017 | {0x3000000, 0xff7ffff0, 0xba98d7a, 0xff7ffff0, 0x3000010}, | ||
| 12018 | {0x3000000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3000010}, | ||
| 12019 | {0x3000000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3000000}, | ||
| 12020 | {0x3000000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3000000}, | ||
| 12021 | {0x3000000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12022 | {0x3000000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12023 | {0x3000000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12024 | {0x3000000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12025 | {0x3000000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12026 | {0x3000000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12027 | {0x3000000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12028 | {0x3000000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3000000}, | ||
| 12029 | {0x3000000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3000080}, | ||
| 12030 | {0x3000000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3000080}, | ||
| 12031 | {0x3000000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3000080}, | ||
| 12032 | {0x3000000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3000080}, | ||
| 12033 | {0x3000000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3000080}, | ||
| 12034 | {0x3000000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3000010}, | ||
| 12035 | {0x3000000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3000010}, | ||
| 12036 | {0x3000000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3000010}, | ||
| 12037 | {0x3000000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3000010}, | ||
| 12038 | {0x3000000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3000010}, | ||
| 12039 | {0x3000000, 0xff7ffff0, 0xf51f853a, 0xff7ffffa, 0x3000010}, | ||
| 12040 | {0x3000000, 0xff7ffff0, 0xff7ffff0, 0xff800000, 0x3000014}, | ||
| 12041 | {0x3000000, 0xff7ffff0, 0xff7fffff, 0xff800000, 0x3000014}, | ||
| 12042 | {0x3000000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12043 | {0x3000000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12044 | {0x3000000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12045 | {0x3000000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12046 | {0x3000000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12047 | {0x3000000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12048 | {0x3000000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12049 | {0x3000000, 0xff7ffff0, 0x4f3495cb, 0xff7ffff0, 0x3000010}, | ||
| 12050 | {0x3000000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3000010}, | ||
| 12051 | {0x3000000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3000010}, | ||
| 12052 | {0x3000000, 0xff7ffff0, 0x6164bd6c, 0xff7ffff0, 0x3000010}, | ||
| 12053 | {0x3000000, 0xff7ffff0, 0x9503366, 0xff7ffff0, 0x3000010}, | ||
| 12054 | {0x3000000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3000010}, | ||
| 12055 | {0x3000000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3000010}, | ||
| 12056 | {0x3000000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe0a, 0x3000010}, | ||
| 12057 | {0x3000000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3000010}, | ||
| 12058 | {0x3000000, 0xff7ffff0, 0x966320b, 0xff7ffff0, 0x3000010}, | ||
| 12059 | {0x3000000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3000010}, | ||
| 12060 | {0x3000000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3000010}, | ||
| 12061 | {0x3000000, 0xff7ffff0, 0x317285d3, 0xff7ffff0, 0x3000010}, | ||
| 12062 | {0x3000000, 0xff7ffff0, 0x3c9623b1, 0xff7ffff0, 0x3000010}, | ||
| 12063 | {0x3000000, 0xff7ffff0, 0x51fd2c7c, 0xff7ffff0, 0x3000010}, | ||
| 12064 | {0x3000000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3000010}, | ||
| 12065 | {0x3000000, 0xff7fffff, 0x0, 0xff7fffff, 0x3000000}, | ||
| 12066 | {0x3000000, 0xff7fffff, 0x1, 0xff7fffff, 0x3000080}, | ||
| 12067 | {0x3000000, 0xff7fffff, 0x76, 0xff7fffff, 0x3000080}, | ||
| 12068 | {0x3000000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3000080}, | ||
| 12069 | {0x3000000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3000080}, | ||
| 12070 | {0x3000000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3000080}, | ||
| 12071 | {0x3000000, 0xff7fffff, 0x800000, 0xff7fffff, 0x3000010}, | ||
| 12072 | {0x3000000, 0xff7fffff, 0x800002, 0xff7fffff, 0x3000010}, | ||
| 12073 | {0x3000000, 0xff7fffff, 0x1398437, 0xff7fffff, 0x3000010}, | ||
| 12074 | {0x3000000, 0xff7fffff, 0xba98d27, 0xff7fffff, 0x3000010}, | ||
| 12075 | {0x3000000, 0xff7fffff, 0xba98d7a, 0xff7fffff, 0x3000010}, | ||
| 12076 | {0x3000000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3000010}, | ||
| 12077 | {0x3000000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3000000}, | ||
| 12078 | {0x3000000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3000000}, | ||
| 12079 | {0x3000000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12080 | {0x3000000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12081 | {0x3000000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12082 | {0x3000000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12083 | {0x3000000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12084 | {0x3000000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12085 | {0x3000000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12086 | {0x3000000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3000000}, | ||
| 12087 | {0x3000000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3000080}, | ||
| 12088 | {0x3000000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3000080}, | ||
| 12089 | {0x3000000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3000080}, | ||
| 12090 | {0x3000000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3000080}, | ||
| 12091 | {0x3000000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3000080}, | ||
| 12092 | {0x3000000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3000010}, | ||
| 12093 | {0x3000000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3000010}, | ||
| 12094 | {0x3000000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3000010}, | ||
| 12095 | {0x3000000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3000010}, | ||
| 12096 | {0x3000000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3000010}, | ||
| 12097 | {0x3000000, 0xff7fffff, 0xf51f853a, 0xff800000, 0x3000014}, | ||
| 12098 | {0x3000000, 0xff7fffff, 0xff7ffff0, 0xff800000, 0x3000014}, | ||
| 12099 | {0x3000000, 0xff7fffff, 0xff7fffff, 0xff800000, 0x3000014}, | ||
| 12100 | {0x3000000, 0xff7fffff, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12101 | {0x3000000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12102 | {0x3000000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12103 | {0x3000000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12104 | {0x3000000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12105 | {0x3000000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12106 | {0x3000000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12107 | {0x3000000, 0xff7fffff, 0x4f3495cb, 0xff7fffff, 0x3000010}, | ||
| 12108 | {0x3000000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3000010}, | ||
| 12109 | {0x3000000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3000010}, | ||
| 12110 | {0x3000000, 0xff7fffff, 0x6164bd6c, 0xff7fffff, 0x3000010}, | ||
| 12111 | {0x3000000, 0xff7fffff, 0x9503366, 0xff7fffff, 0x3000010}, | ||
| 12112 | {0x3000000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3000010}, | ||
| 12113 | {0x3000000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3000010}, | ||
| 12114 | {0x3000000, 0xff7fffff, 0x77f31e2f, 0xff7ffe19, 0x3000010}, | ||
| 12115 | {0x3000000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3000010}, | ||
| 12116 | {0x3000000, 0xff7fffff, 0x966320b, 0xff7fffff, 0x3000010}, | ||
| 12117 | {0x3000000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3000010}, | ||
| 12118 | {0x3000000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3000010}, | ||
| 12119 | {0x3000000, 0xff7fffff, 0x317285d3, 0xff7fffff, 0x3000010}, | ||
| 12120 | {0x3000000, 0xff7fffff, 0x3c9623b1, 0xff7fffff, 0x3000010}, | ||
| 12121 | {0x3000000, 0xff7fffff, 0x51fd2c7c, 0xff7fffff, 0x3000010}, | ||
| 12122 | {0x3000000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3000010}, | ||
| 12123 | {0x3000000, 0xff800000, 0x0, 0xff800000, 0x3000000}, | ||
| 12124 | {0x3000000, 0xff800000, 0x1, 0xff800000, 0x3000080}, | ||
| 12125 | {0x3000000, 0xff800000, 0x76, 0xff800000, 0x3000080}, | ||
| 12126 | {0x3000000, 0xff800000, 0x2b94, 0xff800000, 0x3000080}, | ||
| 12127 | {0x3000000, 0xff800000, 0x636d24, 0xff800000, 0x3000080}, | ||
| 12128 | {0x3000000, 0xff800000, 0x7fffff, 0xff800000, 0x3000080}, | ||
| 12129 | {0x3000000, 0xff800000, 0x800000, 0xff800000, 0x3000000}, | ||
| 12130 | {0x3000000, 0xff800000, 0x800002, 0xff800000, 0x3000000}, | ||
| 12131 | {0x3000000, 0xff800000, 0x1398437, 0xff800000, 0x3000000}, | ||
| 12132 | {0x3000000, 0xff800000, 0xba98d27, 0xff800000, 0x3000000}, | ||
| 12133 | {0x3000000, 0xff800000, 0xba98d7a, 0xff800000, 0x3000000}, | ||
| 12134 | {0x3000000, 0xff800000, 0x751f853a, 0xff800000, 0x3000000}, | ||
| 12135 | {0x3000000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3000000}, | ||
| 12136 | {0x3000000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3000000}, | ||
| 12137 | {0x3000000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3000001}, | ||
| 12138 | {0x3000000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12139 | {0x3000000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12140 | {0x3000000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12141 | {0x3000000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12142 | {0x3000000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12143 | {0x3000000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12144 | {0x3000000, 0xff800000, 0x80000000, 0xff800000, 0x3000000}, | ||
| 12145 | {0x3000000, 0xff800000, 0x80000001, 0xff800000, 0x3000080}, | ||
| 12146 | {0x3000000, 0xff800000, 0x80000076, 0xff800000, 0x3000080}, | ||
| 12147 | {0x3000000, 0xff800000, 0x80002b94, 0xff800000, 0x3000080}, | ||
| 12148 | {0x3000000, 0xff800000, 0x80636d24, 0xff800000, 0x3000080}, | ||
| 12149 | {0x3000000, 0xff800000, 0x807fffff, 0xff800000, 0x3000080}, | ||
| 12150 | {0x3000000, 0xff800000, 0x80800000, 0xff800000, 0x3000000}, | ||
| 12151 | {0x3000000, 0xff800000, 0x80800002, 0xff800000, 0x3000000}, | ||
| 12152 | {0x3000000, 0xff800000, 0x81398437, 0xff800000, 0x3000000}, | ||
| 12153 | {0x3000000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3000000}, | ||
| 12154 | {0x3000000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3000000}, | ||
| 12155 | {0x3000000, 0xff800000, 0xf51f853a, 0xff800000, 0x3000000}, | ||
| 12156 | {0x3000000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3000000}, | ||
| 12157 | {0x3000000, 0xff800000, 0xff7fffff, 0xff800000, 0x3000000}, | ||
| 12158 | {0x3000000, 0xff800000, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12159 | {0x3000000, 0xff800000, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12160 | {0x3000000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12161 | {0x3000000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12162 | {0x3000000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12163 | {0x3000000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12164 | {0x3000000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12165 | {0x3000000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3000000}, | ||
| 12166 | {0x3000000, 0xff800000, 0xe73a5134, 0xff800000, 0x3000000}, | ||
| 12167 | {0x3000000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3000000}, | ||
| 12168 | {0x3000000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3000000}, | ||
| 12169 | {0x3000000, 0xff800000, 0x9503366, 0xff800000, 0x3000000}, | ||
| 12170 | {0x3000000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3000000}, | ||
| 12171 | {0x3000000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3000000}, | ||
| 12172 | {0x3000000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3000000}, | ||
| 12173 | {0x3000000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3000000}, | ||
| 12174 | {0x3000000, 0xff800000, 0x966320b, 0xff800000, 0x3000000}, | ||
| 12175 | {0x3000000, 0xff800000, 0xb26bddee, 0xff800000, 0x3000000}, | ||
| 12176 | {0x3000000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3000000}, | ||
| 12177 | {0x3000000, 0xff800000, 0x317285d3, 0xff800000, 0x3000000}, | ||
| 12178 | {0x3000000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3000000}, | ||
| 12179 | {0x3000000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3000000}, | ||
| 12180 | {0x3000000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3000000}, | ||
| 12181 | {0x3000000, 0xff800001, 0x0, 0x7fc00000, 0x3000001}, | ||
| 12182 | {0x3000000, 0xff800001, 0x1, 0x7fc00000, 0x3000081}, | ||
| 12183 | {0x3000000, 0xff800001, 0x76, 0x7fc00000, 0x3000081}, | ||
| 12184 | {0x3000000, 0xff800001, 0x2b94, 0x7fc00000, 0x3000081}, | ||
| 12185 | {0x3000000, 0xff800001, 0x636d24, 0x7fc00000, 0x3000081}, | ||
| 12186 | {0x3000000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3000081}, | ||
| 12187 | {0x3000000, 0xff800001, 0x800000, 0x7fc00000, 0x3000001}, | ||
| 12188 | {0x3000000, 0xff800001, 0x800002, 0x7fc00000, 0x3000001}, | ||
| 12189 | {0x3000000, 0xff800001, 0x1398437, 0x7fc00000, 0x3000001}, | ||
| 12190 | {0x3000000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3000001}, | ||
| 12191 | {0x3000000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3000001}, | ||
| 12192 | {0x3000000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3000001}, | ||
| 12193 | {0x3000000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3000001}, | ||
| 12194 | {0x3000000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3000001}, | ||
| 12195 | {0x3000000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3000001}, | ||
| 12196 | {0x3000000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12197 | {0x3000000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12198 | {0x3000000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12199 | {0x3000000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3000001}, | ||
| 12200 | {0x3000000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3000001}, | ||
| 12201 | {0x3000000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3000001}, | ||
| 12202 | {0x3000000, 0xff800001, 0x80000000, 0x7fc00000, 0x3000001}, | ||
| 12203 | {0x3000000, 0xff800001, 0x80000001, 0x7fc00000, 0x3000081}, | ||
| 12204 | {0x3000000, 0xff800001, 0x80000076, 0x7fc00000, 0x3000081}, | ||
| 12205 | {0x3000000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3000081}, | ||
| 12206 | {0x3000000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3000081}, | ||
| 12207 | {0x3000000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3000081}, | ||
| 12208 | {0x3000000, 0xff800001, 0x80800000, 0x7fc00000, 0x3000001}, | ||
| 12209 | {0x3000000, 0xff800001, 0x80800002, 0x7fc00000, 0x3000001}, | ||
| 12210 | {0x3000000, 0xff800001, 0x81398437, 0x7fc00000, 0x3000001}, | ||
| 12211 | {0x3000000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3000001}, | ||
| 12212 | {0x3000000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3000001}, | ||
| 12213 | {0x3000000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3000001}, | ||
| 12214 | {0x3000000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3000001}, | ||
| 12215 | {0x3000000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3000001}, | ||
| 12216 | {0x3000000, 0xff800001, 0xff800000, 0x7fc00000, 0x3000001}, | ||
| 12217 | {0x3000000, 0xff800001, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12218 | {0x3000000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12219 | {0x3000000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12220 | {0x3000000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3000001}, | ||
| 12221 | {0x3000000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3000001}, | ||
| 12222 | {0x3000000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3000001}, | ||
| 12223 | {0x3000000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3000001}, | ||
| 12224 | {0x3000000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3000001}, | ||
| 12225 | {0x3000000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3000001}, | ||
| 12226 | {0x3000000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3000001}, | ||
| 12227 | {0x3000000, 0xff800001, 0x9503366, 0x7fc00000, 0x3000001}, | ||
| 12228 | {0x3000000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3000001}, | ||
| 12229 | {0x3000000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3000001}, | ||
| 12230 | {0x3000000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3000001}, | ||
| 12231 | {0x3000000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3000001}, | ||
| 12232 | {0x3000000, 0xff800001, 0x966320b, 0x7fc00000, 0x3000001}, | ||
| 12233 | {0x3000000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3000001}, | ||
| 12234 | {0x3000000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, | ||
| 12235 | {0x3000000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3000001}, | ||
| 12236 | {0x3000000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3000001}, | ||
| 12237 | {0x3000000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3000001}, | ||
| 12238 | {0x3000000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3000001}, | ||
| 12239 | {0x3000000, 0xff984a37, 0x0, 0x7fc00000, 0x3000001}, | ||
| 12240 | {0x3000000, 0xff984a37, 0x1, 0x7fc00000, 0x3000081}, | ||
| 12241 | {0x3000000, 0xff984a37, 0x76, 0x7fc00000, 0x3000081}, | ||
| 12242 | {0x3000000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3000081}, | ||
| 12243 | {0x3000000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3000081}, | ||
| 12244 | {0x3000000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3000081}, | ||
| 12245 | {0x3000000, 0xff984a37, 0x800000, 0x7fc00000, 0x3000001}, | ||
| 12246 | {0x3000000, 0xff984a37, 0x800002, 0x7fc00000, 0x3000001}, | ||
| 12247 | {0x3000000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3000001}, | ||
| 12248 | {0x3000000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3000001}, | ||
| 12249 | {0x3000000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3000001}, | ||
| 12250 | {0x3000000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3000001}, | ||
| 12251 | {0x3000000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3000001}, | ||
| 12252 | {0x3000000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3000001}, | ||
| 12253 | {0x3000000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3000001}, | ||
| 12254 | {0x3000000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12255 | {0x3000000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12256 | {0x3000000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12257 | {0x3000000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3000001}, | ||
| 12258 | {0x3000000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3000001}, | ||
| 12259 | {0x3000000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3000001}, | ||
| 12260 | {0x3000000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3000001}, | ||
| 12261 | {0x3000000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3000081}, | ||
| 12262 | {0x3000000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3000081}, | ||
| 12263 | {0x3000000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3000081}, | ||
| 12264 | {0x3000000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3000081}, | ||
| 12265 | {0x3000000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3000081}, | ||
| 12266 | {0x3000000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3000001}, | ||
| 12267 | {0x3000000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3000001}, | ||
| 12268 | {0x3000000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3000001}, | ||
| 12269 | {0x3000000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3000001}, | ||
| 12270 | {0x3000000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3000001}, | ||
| 12271 | {0x3000000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3000001}, | ||
| 12272 | {0x3000000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3000001}, | ||
| 12273 | {0x3000000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3000001}, | ||
| 12274 | {0x3000000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3000001}, | ||
| 12275 | {0x3000000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12276 | {0x3000000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12277 | {0x3000000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12278 | {0x3000000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3000001}, | ||
| 12279 | {0x3000000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3000001}, | ||
| 12280 | {0x3000000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3000001}, | ||
| 12281 | {0x3000000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3000001}, | ||
| 12282 | {0x3000000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3000001}, | ||
| 12283 | {0x3000000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3000001}, | ||
| 12284 | {0x3000000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3000001}, | ||
| 12285 | {0x3000000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3000001}, | ||
| 12286 | {0x3000000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3000001}, | ||
| 12287 | {0x3000000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3000001}, | ||
| 12288 | {0x3000000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3000001}, | ||
| 12289 | {0x3000000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3000001}, | ||
| 12290 | {0x3000000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3000001}, | ||
| 12291 | {0x3000000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3000001}, | ||
| 12292 | {0x3000000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, | ||
| 12293 | {0x3000000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3000001}, | ||
| 12294 | {0x3000000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3000001}, | ||
| 12295 | {0x3000000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3000001}, | ||
| 12296 | {0x3000000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3000001}, | ||
| 12297 | {0x3000000, 0xffbfffff, 0x0, 0x7fc00000, 0x3000001}, | ||
| 12298 | {0x3000000, 0xffbfffff, 0x1, 0x7fc00000, 0x3000081}, | ||
| 12299 | {0x3000000, 0xffbfffff, 0x76, 0x7fc00000, 0x3000081}, | ||
| 12300 | {0x3000000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3000081}, | ||
| 12301 | {0x3000000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3000081}, | ||
| 12302 | {0x3000000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3000081}, | ||
| 12303 | {0x3000000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3000001}, | ||
| 12304 | {0x3000000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3000001}, | ||
| 12305 | {0x3000000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3000001}, | ||
| 12306 | {0x3000000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3000001}, | ||
| 12307 | {0x3000000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3000001}, | ||
| 12308 | {0x3000000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3000001}, | ||
| 12309 | {0x3000000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3000001}, | ||
| 12310 | {0x3000000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3000001}, | ||
| 12311 | {0x3000000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3000001}, | ||
| 12312 | {0x3000000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12313 | {0x3000000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12314 | {0x3000000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12315 | {0x3000000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3000001}, | ||
| 12316 | {0x3000000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3000001}, | ||
| 12317 | {0x3000000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3000001}, | ||
| 12318 | {0x3000000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3000001}, | ||
| 12319 | {0x3000000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3000081}, | ||
| 12320 | {0x3000000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3000081}, | ||
| 12321 | {0x3000000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3000081}, | ||
| 12322 | {0x3000000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3000081}, | ||
| 12323 | {0x3000000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3000081}, | ||
| 12324 | {0x3000000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3000001}, | ||
| 12325 | {0x3000000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3000001}, | ||
| 12326 | {0x3000000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3000001}, | ||
| 12327 | {0x3000000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3000001}, | ||
| 12328 | {0x3000000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3000001}, | ||
| 12329 | {0x3000000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3000001}, | ||
| 12330 | {0x3000000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3000001}, | ||
| 12331 | {0x3000000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3000001}, | ||
| 12332 | {0x3000000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3000001}, | ||
| 12333 | {0x3000000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12334 | {0x3000000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12335 | {0x3000000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12336 | {0x3000000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3000001}, | ||
| 12337 | {0x3000000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3000001}, | ||
| 12338 | {0x3000000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3000001}, | ||
| 12339 | {0x3000000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3000001}, | ||
| 12340 | {0x3000000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3000001}, | ||
| 12341 | {0x3000000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3000001}, | ||
| 12342 | {0x3000000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3000001}, | ||
| 12343 | {0x3000000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3000001}, | ||
| 12344 | {0x3000000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3000001}, | ||
| 12345 | {0x3000000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3000001}, | ||
| 12346 | {0x3000000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3000001}, | ||
| 12347 | {0x3000000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3000001}, | ||
| 12348 | {0x3000000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3000001}, | ||
| 12349 | {0x3000000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3000001}, | ||
| 12350 | {0x3000000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, | ||
| 12351 | {0x3000000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3000001}, | ||
| 12352 | {0x3000000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3000001}, | ||
| 12353 | {0x3000000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3000001}, | ||
| 12354 | {0x3000000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3000001}, | ||
| 12355 | {0x3000000, 0xffc00000, 0x0, 0x7fc00000, 0x3000000}, | ||
| 12356 | {0x3000000, 0xffc00000, 0x1, 0x7fc00000, 0x3000080}, | ||
| 12357 | {0x3000000, 0xffc00000, 0x76, 0x7fc00000, 0x3000080}, | ||
| 12358 | {0x3000000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3000080}, | ||
| 12359 | {0x3000000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3000080}, | ||
| 12360 | {0x3000000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3000080}, | ||
| 12361 | {0x3000000, 0xffc00000, 0x800000, 0x7fc00000, 0x3000000}, | ||
| 12362 | {0x3000000, 0xffc00000, 0x800002, 0x7fc00000, 0x3000000}, | ||
| 12363 | {0x3000000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3000000}, | ||
| 12364 | {0x3000000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3000000}, | ||
| 12365 | {0x3000000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3000000}, | ||
| 12366 | {0x3000000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3000000}, | ||
| 12367 | {0x3000000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3000000}, | ||
| 12368 | {0x3000000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3000000}, | ||
| 12369 | {0x3000000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3000000}, | ||
| 12370 | {0x3000000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12371 | {0x3000000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12372 | {0x3000000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12373 | {0x3000000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12374 | {0x3000000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12375 | {0x3000000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12376 | {0x3000000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3000000}, | ||
| 12377 | {0x3000000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3000080}, | ||
| 12378 | {0x3000000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3000080}, | ||
| 12379 | {0x3000000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3000080}, | ||
| 12380 | {0x3000000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3000080}, | ||
| 12381 | {0x3000000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3000080}, | ||
| 12382 | {0x3000000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3000000}, | ||
| 12383 | {0x3000000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3000000}, | ||
| 12384 | {0x3000000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3000000}, | ||
| 12385 | {0x3000000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3000000}, | ||
| 12386 | {0x3000000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3000000}, | ||
| 12387 | {0x3000000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3000000}, | ||
| 12388 | {0x3000000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3000000}, | ||
| 12389 | {0x3000000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3000000}, | ||
| 12390 | {0x3000000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3000000}, | ||
| 12391 | {0x3000000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12392 | {0x3000000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12393 | {0x3000000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12394 | {0x3000000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12395 | {0x3000000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12396 | {0x3000000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12397 | {0x3000000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3000000}, | ||
| 12398 | {0x3000000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3000000}, | ||
| 12399 | {0x3000000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3000000}, | ||
| 12400 | {0x3000000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3000000}, | ||
| 12401 | {0x3000000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3000000}, | ||
| 12402 | {0x3000000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3000000}, | ||
| 12403 | {0x3000000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3000000}, | ||
| 12404 | {0x3000000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3000000}, | ||
| 12405 | {0x3000000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3000000}, | ||
| 12406 | {0x3000000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3000000}, | ||
| 12407 | {0x3000000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3000000}, | ||
| 12408 | {0x3000000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, | ||
| 12409 | {0x3000000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3000000}, | ||
| 12410 | {0x3000000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3000000}, | ||
| 12411 | {0x3000000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3000000}, | ||
| 12412 | {0x3000000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3000000}, | ||
| 12413 | {0x3000000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3000000}, | ||
| 12414 | {0x3000000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3000080}, | ||
| 12415 | {0x3000000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3000080}, | ||
| 12416 | {0x3000000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3000080}, | ||
| 12417 | {0x3000000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3000080}, | ||
| 12418 | {0x3000000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3000080}, | ||
| 12419 | {0x3000000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3000000}, | ||
| 12420 | {0x3000000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3000000}, | ||
| 12421 | {0x3000000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3000000}, | ||
| 12422 | {0x3000000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3000000}, | ||
| 12423 | {0x3000000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3000000}, | ||
| 12424 | {0x3000000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3000000}, | ||
| 12425 | {0x3000000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3000000}, | ||
| 12426 | {0x3000000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3000000}, | ||
| 12427 | {0x3000000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3000000}, | ||
| 12428 | {0x3000000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12429 | {0x3000000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12430 | {0x3000000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12431 | {0x3000000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12432 | {0x3000000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12433 | {0x3000000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12434 | {0x3000000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3000000}, | ||
| 12435 | {0x3000000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3000080}, | ||
| 12436 | {0x3000000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3000080}, | ||
| 12437 | {0x3000000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3000080}, | ||
| 12438 | {0x3000000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3000080}, | ||
| 12439 | {0x3000000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3000080}, | ||
| 12440 | {0x3000000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3000000}, | ||
| 12441 | {0x3000000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3000000}, | ||
| 12442 | {0x3000000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3000000}, | ||
| 12443 | {0x3000000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3000000}, | ||
| 12444 | {0x3000000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3000000}, | ||
| 12445 | {0x3000000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3000000}, | ||
| 12446 | {0x3000000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3000000}, | ||
| 12447 | {0x3000000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3000000}, | ||
| 12448 | {0x3000000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3000000}, | ||
| 12449 | {0x3000000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12450 | {0x3000000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12451 | {0x3000000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12452 | {0x3000000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12453 | {0x3000000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12454 | {0x3000000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12455 | {0x3000000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3000000}, | ||
| 12456 | {0x3000000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3000000}, | ||
| 12457 | {0x3000000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3000000}, | ||
| 12458 | {0x3000000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3000000}, | ||
| 12459 | {0x3000000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3000000}, | ||
| 12460 | {0x3000000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3000000}, | ||
| 12461 | {0x3000000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3000000}, | ||
| 12462 | {0x3000000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3000000}, | ||
| 12463 | {0x3000000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3000000}, | ||
| 12464 | {0x3000000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3000000}, | ||
| 12465 | {0x3000000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3000000}, | ||
| 12466 | {0x3000000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, | ||
| 12467 | {0x3000000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3000000}, | ||
| 12468 | {0x3000000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3000000}, | ||
| 12469 | {0x3000000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3000000}, | ||
| 12470 | {0x3000000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3000000}, | ||
| 12471 | {0x3000000, 0xffffffff, 0x0, 0x7fc00000, 0x3000000}, | ||
| 12472 | {0x3000000, 0xffffffff, 0x1, 0x7fc00000, 0x3000080}, | ||
| 12473 | {0x3000000, 0xffffffff, 0x76, 0x7fc00000, 0x3000080}, | ||
| 12474 | {0x3000000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3000080}, | ||
| 12475 | {0x3000000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3000080}, | ||
| 12476 | {0x3000000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3000080}, | ||
| 12477 | {0x3000000, 0xffffffff, 0x800000, 0x7fc00000, 0x3000000}, | ||
| 12478 | {0x3000000, 0xffffffff, 0x800002, 0x7fc00000, 0x3000000}, | ||
| 12479 | {0x3000000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3000000}, | ||
| 12480 | {0x3000000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3000000}, | ||
| 12481 | {0x3000000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3000000}, | ||
| 12482 | {0x3000000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3000000}, | ||
| 12483 | {0x3000000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3000000}, | ||
| 12484 | {0x3000000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3000000}, | ||
| 12485 | {0x3000000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3000000}, | ||
| 12486 | {0x3000000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12487 | {0x3000000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12488 | {0x3000000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12489 | {0x3000000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12490 | {0x3000000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12491 | {0x3000000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12492 | {0x3000000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3000000}, | ||
| 12493 | {0x3000000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3000080}, | ||
| 12494 | {0x3000000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3000080}, | ||
| 12495 | {0x3000000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3000080}, | ||
| 12496 | {0x3000000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3000080}, | ||
| 12497 | {0x3000000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3000080}, | ||
| 12498 | {0x3000000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3000000}, | ||
| 12499 | {0x3000000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3000000}, | ||
| 12500 | {0x3000000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3000000}, | ||
| 12501 | {0x3000000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3000000}, | ||
| 12502 | {0x3000000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3000000}, | ||
| 12503 | {0x3000000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3000000}, | ||
| 12504 | {0x3000000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3000000}, | ||
| 12505 | {0x3000000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3000000}, | ||
| 12506 | {0x3000000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3000000}, | ||
| 12507 | {0x3000000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12508 | {0x3000000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12509 | {0x3000000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12510 | {0x3000000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12511 | {0x3000000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12512 | {0x3000000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12513 | {0x3000000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3000000}, | ||
| 12514 | {0x3000000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3000000}, | ||
| 12515 | {0x3000000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3000000}, | ||
| 12516 | {0x3000000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3000000}, | ||
| 12517 | {0x3000000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3000000}, | ||
| 12518 | {0x3000000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3000000}, | ||
| 12519 | {0x3000000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3000000}, | ||
| 12520 | {0x3000000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3000000}, | ||
| 12521 | {0x3000000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3000000}, | ||
| 12522 | {0x3000000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3000000}, | ||
| 12523 | {0x3000000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3000000}, | ||
| 12524 | {0x3000000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, | ||
| 12525 | {0x3000000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3000000}, | ||
| 12526 | {0x3000000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3000000}, | ||
| 12527 | {0x3000000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3000000}, | ||
| 12528 | {0x3000000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3000000}, | ||
| 12529 | {0x3000000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3000000}, | ||
| 12530 | {0x3000000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3000080}, | ||
| 12531 | {0x3000000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3000080}, | ||
| 12532 | {0x3000000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3000080}, | ||
| 12533 | {0x3000000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3000080}, | ||
| 12534 | {0x3000000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3000080}, | ||
| 12535 | {0x3000000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3000010}, | ||
| 12536 | {0x3000000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3000010}, | ||
| 12537 | {0x3000000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3000010}, | ||
| 12538 | {0x3000000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3000010}, | ||
| 12539 | {0x3000000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3000010}, | ||
| 12540 | {0x3000000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 12541 | {0x3000000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 12542 | {0x3000000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 12543 | {0x3000000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12544 | {0x3000000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12545 | {0x3000000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12546 | {0x3000000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12547 | {0x3000000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12548 | {0x3000000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12549 | {0x3000000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12550 | {0x3000000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3000000}, | ||
| 12551 | {0x3000000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3000080}, | ||
| 12552 | {0x3000000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3000080}, | ||
| 12553 | {0x3000000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3000080}, | ||
| 12554 | {0x3000000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3000080}, | ||
| 12555 | {0x3000000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3000080}, | ||
| 12556 | {0x3000000, 0x4f3495cb, 0x80800000, 0x4f3495cb, 0x3000010}, | ||
| 12557 | {0x3000000, 0x4f3495cb, 0x80800002, 0x4f3495cb, 0x3000010}, | ||
| 12558 | {0x3000000, 0x4f3495cb, 0x81398437, 0x4f3495cb, 0x3000010}, | ||
| 12559 | {0x3000000, 0x4f3495cb, 0x8ba98d27, 0x4f3495cb, 0x3000010}, | ||
| 12560 | {0x3000000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495cb, 0x3000010}, | ||
| 12561 | {0x3000000, 0x4f3495cb, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 12562 | {0x3000000, 0x4f3495cb, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 12563 | {0x3000000, 0x4f3495cb, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 12564 | {0x3000000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12565 | {0x3000000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12566 | {0x3000000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12567 | {0x3000000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12568 | {0x3000000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12569 | {0x3000000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12570 | {0x3000000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12571 | {0x3000000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3000000}, | ||
| 12572 | {0x3000000, 0x4f3495cb, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 12573 | {0x3000000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 12574 | {0x3000000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 12575 | {0x3000000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3000010}, | ||
| 12576 | {0x3000000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495cb, 0x3000010}, | ||
| 12577 | {0x3000000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 12578 | {0x3000000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 12579 | {0x3000000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495cb, 0x3000010}, | ||
| 12580 | {0x3000000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3000010}, | ||
| 12581 | {0x3000000, 0x4f3495cb, 0xb26bddee, 0x4f3495cb, 0x3000010}, | ||
| 12582 | {0x3000000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495cb, 0x3000010}, | ||
| 12583 | {0x3000000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3000010}, | ||
| 12584 | {0x3000000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3000010}, | ||
| 12585 | {0x3000000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3000010}, | ||
| 12586 | {0x3000000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 12587 | {0x3000000, 0xe73a5134, 0x0, 0xe73a5134, 0x3000000}, | ||
| 12588 | {0x3000000, 0xe73a5134, 0x1, 0xe73a5134, 0x3000080}, | ||
| 12589 | {0x3000000, 0xe73a5134, 0x76, 0xe73a5134, 0x3000080}, | ||
| 12590 | {0x3000000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3000080}, | ||
| 12591 | {0x3000000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3000080}, | ||
| 12592 | {0x3000000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3000080}, | ||
| 12593 | {0x3000000, 0xe73a5134, 0x800000, 0xe73a5134, 0x3000010}, | ||
| 12594 | {0x3000000, 0xe73a5134, 0x800002, 0xe73a5134, 0x3000010}, | ||
| 12595 | {0x3000000, 0xe73a5134, 0x1398437, 0xe73a5134, 0x3000010}, | ||
| 12596 | {0x3000000, 0xe73a5134, 0xba98d27, 0xe73a5134, 0x3000010}, | ||
| 12597 | {0x3000000, 0xe73a5134, 0xba98d7a, 0xe73a5134, 0x3000010}, | ||
| 12598 | {0x3000000, 0xe73a5134, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 12599 | {0x3000000, 0xe73a5134, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 12600 | {0x3000000, 0xe73a5134, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 12601 | {0x3000000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12602 | {0x3000000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12603 | {0x3000000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12604 | {0x3000000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12605 | {0x3000000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12606 | {0x3000000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12607 | {0x3000000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12608 | {0x3000000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3000000}, | ||
| 12609 | {0x3000000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3000080}, | ||
| 12610 | {0x3000000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3000080}, | ||
| 12611 | {0x3000000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3000080}, | ||
| 12612 | {0x3000000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3000080}, | ||
| 12613 | {0x3000000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3000080}, | ||
| 12614 | {0x3000000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3000010}, | ||
| 12615 | {0x3000000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3000010}, | ||
| 12616 | {0x3000000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3000010}, | ||
| 12617 | {0x3000000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3000010}, | ||
| 12618 | {0x3000000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3000010}, | ||
| 12619 | {0x3000000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 12620 | {0x3000000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 12621 | {0x3000000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 12622 | {0x3000000, 0xe73a5134, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12623 | {0x3000000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12624 | {0x3000000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12625 | {0x3000000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12626 | {0x3000000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12627 | {0x3000000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12628 | {0x3000000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12629 | {0x3000000, 0xe73a5134, 0x4f3495cb, 0xe73a5134, 0x3000010}, | ||
| 12630 | {0x3000000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3000000}, | ||
| 12631 | {0x3000000, 0xe73a5134, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 12632 | {0x3000000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3000010}, | ||
| 12633 | {0x3000000, 0xe73a5134, 0x9503366, 0xe73a5134, 0x3000010}, | ||
| 12634 | {0x3000000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3000010}, | ||
| 12635 | {0x3000000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3000000}, | ||
| 12636 | {0x3000000, 0xe73a5134, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 12637 | {0x3000000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3000010}, | ||
| 12638 | {0x3000000, 0xe73a5134, 0x966320b, 0xe73a5134, 0x3000010}, | ||
| 12639 | {0x3000000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3000010}, | ||
| 12640 | {0x3000000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3000010}, | ||
| 12641 | {0x3000000, 0xe73a5134, 0x317285d3, 0xe73a5134, 0x3000010}, | ||
| 12642 | {0x3000000, 0xe73a5134, 0x3c9623b1, 0xe73a5134, 0x3000010}, | ||
| 12643 | {0x3000000, 0xe73a5134, 0x51fd2c7c, 0xe73a5134, 0x3000010}, | ||
| 12644 | {0x3000000, 0xe73a5134, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 12645 | {0x3000000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3000000}, | ||
| 12646 | {0x3000000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3000080}, | ||
| 12647 | {0x3000000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3000080}, | ||
| 12648 | {0x3000000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3000080}, | ||
| 12649 | {0x3000000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3000080}, | ||
| 12650 | {0x3000000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3000080}, | ||
| 12651 | {0x3000000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3000010}, | ||
| 12652 | {0x3000000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3000010}, | ||
| 12653 | {0x3000000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3000010}, | ||
| 12654 | {0x3000000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3000010}, | ||
| 12655 | {0x3000000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3000010}, | ||
| 12656 | {0x3000000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3000010}, | ||
| 12657 | {0x3000000, 0x7c994e9e, 0x7f7ffff0, 0x7f800000, 0x3000014}, | ||
| 12658 | {0x3000000, 0x7c994e9e, 0x7f7fffff, 0x7f800000, 0x3000014}, | ||
| 12659 | {0x3000000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12660 | {0x3000000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12661 | {0x3000000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12662 | {0x3000000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12663 | {0x3000000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12664 | {0x3000000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12665 | {0x3000000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12666 | {0x3000000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3000000}, | ||
| 12667 | {0x3000000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3000080}, | ||
| 12668 | {0x3000000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3000080}, | ||
| 12669 | {0x3000000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3000080}, | ||
| 12670 | {0x3000000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3000080}, | ||
| 12671 | {0x3000000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3000080}, | ||
| 12672 | {0x3000000, 0x7c994e9e, 0x80800000, 0x7c994e9e, 0x3000010}, | ||
| 12673 | {0x3000000, 0x7c994e9e, 0x80800002, 0x7c994e9e, 0x3000010}, | ||
| 12674 | {0x3000000, 0x7c994e9e, 0x81398437, 0x7c994e9e, 0x3000010}, | ||
| 12675 | {0x3000000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9e, 0x3000010}, | ||
| 12676 | {0x3000000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9e, 0x3000010}, | ||
| 12677 | {0x3000000, 0x7c994e9e, 0xf51f853a, 0x7c994d5f, 0x3000010}, | ||
| 12678 | {0x3000000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3000010}, | ||
| 12679 | {0x3000000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3000010}, | ||
| 12680 | {0x3000000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12681 | {0x3000000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12682 | {0x3000000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12683 | {0x3000000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12684 | {0x3000000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12685 | {0x3000000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12686 | {0x3000000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12687 | {0x3000000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3000010}, | ||
| 12688 | {0x3000000, 0x7c994e9e, 0xe73a5134, 0x7c994e9e, 0x3000010}, | ||
| 12689 | {0x3000000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3000000}, | ||
| 12690 | {0x3000000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3000010}, | ||
| 12691 | {0x3000000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3000010}, | ||
| 12692 | {0x3000000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9e, 0x3000010}, | ||
| 12693 | {0x3000000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9e, 0x3000010}, | ||
| 12694 | {0x3000000, 0x7c994e9e, 0x77f31e2f, 0x7c998b66, 0x3000010}, | ||
| 12695 | {0x3000000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9e, 0x3000010}, | ||
| 12696 | {0x3000000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3000010}, | ||
| 12697 | {0x3000000, 0x7c994e9e, 0xb26bddee, 0x7c994e9e, 0x3000010}, | ||
| 12698 | {0x3000000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9e, 0x3000010}, | ||
| 12699 | {0x3000000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3000010}, | ||
| 12700 | {0x3000000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3000010}, | ||
| 12701 | {0x3000000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3000010}, | ||
| 12702 | {0x3000000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3000000}, | ||
| 12703 | {0x3000000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3000000}, | ||
| 12704 | {0x3000000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3000080}, | ||
| 12705 | {0x3000000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3000080}, | ||
| 12706 | {0x3000000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3000080}, | ||
| 12707 | {0x3000000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3000080}, | ||
| 12708 | {0x3000000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3000080}, | ||
| 12709 | {0x3000000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3000010}, | ||
| 12710 | {0x3000000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3000010}, | ||
| 12711 | {0x3000000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3000010}, | ||
| 12712 | {0x3000000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3000010}, | ||
| 12713 | {0x3000000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3000010}, | ||
| 12714 | {0x3000000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 12715 | {0x3000000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 12716 | {0x3000000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 12717 | {0x3000000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12718 | {0x3000000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12719 | {0x3000000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12720 | {0x3000000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12721 | {0x3000000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12722 | {0x3000000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12723 | {0x3000000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12724 | {0x3000000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3000000}, | ||
| 12725 | {0x3000000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3000080}, | ||
| 12726 | {0x3000000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3000080}, | ||
| 12727 | {0x3000000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3000080}, | ||
| 12728 | {0x3000000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3000080}, | ||
| 12729 | {0x3000000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3000080}, | ||
| 12730 | {0x3000000, 0x6164bd6c, 0x80800000, 0x6164bd6c, 0x3000010}, | ||
| 12731 | {0x3000000, 0x6164bd6c, 0x80800002, 0x6164bd6c, 0x3000010}, | ||
| 12732 | {0x3000000, 0x6164bd6c, 0x81398437, 0x6164bd6c, 0x3000010}, | ||
| 12733 | {0x3000000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6c, 0x3000010}, | ||
| 12734 | {0x3000000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6c, 0x3000010}, | ||
| 12735 | {0x3000000, 0x6164bd6c, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 12736 | {0x3000000, 0x6164bd6c, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 12737 | {0x3000000, 0x6164bd6c, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 12738 | {0x3000000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12739 | {0x3000000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12740 | {0x3000000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12741 | {0x3000000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12742 | {0x3000000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12743 | {0x3000000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12744 | {0x3000000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12745 | {0x3000000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3000010}, | ||
| 12746 | {0x3000000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3000010}, | ||
| 12747 | {0x3000000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 12748 | {0x3000000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3000000}, | ||
| 12749 | {0x3000000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3000010}, | ||
| 12750 | {0x3000000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6c, 0x3000010}, | ||
| 12751 | {0x3000000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3000010}, | ||
| 12752 | {0x3000000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 12753 | {0x3000000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6c, 0x3000010}, | ||
| 12754 | {0x3000000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3000010}, | ||
| 12755 | {0x3000000, 0x6164bd6c, 0xb26bddee, 0x6164bd6c, 0x3000010}, | ||
| 12756 | {0x3000000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6c, 0x3000010}, | ||
| 12757 | {0x3000000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3000010}, | ||
| 12758 | {0x3000000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3000010}, | ||
| 12759 | {0x3000000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3000010}, | ||
| 12760 | {0x3000000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 12761 | {0x3000000, 0x9503366, 0x0, 0x9503366, 0x3000000}, | ||
| 12762 | {0x3000000, 0x9503366, 0x1, 0x9503366, 0x3000080}, | ||
| 12763 | {0x3000000, 0x9503366, 0x76, 0x9503366, 0x3000080}, | ||
| 12764 | {0x3000000, 0x9503366, 0x2b94, 0x9503366, 0x3000080}, | ||
| 12765 | {0x3000000, 0x9503366, 0x636d24, 0x9503366, 0x3000080}, | ||
| 12766 | {0x3000000, 0x9503366, 0x7fffff, 0x9503366, 0x3000080}, | ||
| 12767 | {0x3000000, 0x9503366, 0x800000, 0x95033a6, 0x3000000}, | ||
| 12768 | {0x3000000, 0x9503366, 0x800002, 0x95033a6, 0x3000010}, | ||
| 12769 | {0x3000000, 0x9503366, 0x1398437, 0x9503420, 0x3000010}, | ||
| 12770 | {0x3000000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3000010}, | ||
| 12771 | {0x3000000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3000010}, | ||
| 12772 | {0x3000000, 0x9503366, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 12773 | {0x3000000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 12774 | {0x3000000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 12775 | {0x3000000, 0x9503366, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12776 | {0x3000000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12777 | {0x3000000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12778 | {0x3000000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12779 | {0x3000000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12780 | {0x3000000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12781 | {0x3000000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12782 | {0x3000000, 0x9503366, 0x80000000, 0x9503366, 0x3000000}, | ||
| 12783 | {0x3000000, 0x9503366, 0x80000001, 0x9503366, 0x3000080}, | ||
| 12784 | {0x3000000, 0x9503366, 0x80000076, 0x9503366, 0x3000080}, | ||
| 12785 | {0x3000000, 0x9503366, 0x80002b94, 0x9503366, 0x3000080}, | ||
| 12786 | {0x3000000, 0x9503366, 0x80636d24, 0x9503366, 0x3000080}, | ||
| 12787 | {0x3000000, 0x9503366, 0x807fffff, 0x9503366, 0x3000080}, | ||
| 12788 | {0x3000000, 0x9503366, 0x80800000, 0x9503326, 0x3000000}, | ||
| 12789 | {0x3000000, 0x9503366, 0x80800002, 0x9503326, 0x3000010}, | ||
| 12790 | {0x3000000, 0x9503366, 0x81398437, 0x95032ac, 0x3000010}, | ||
| 12791 | {0x3000000, 0x9503366, 0x8ba98d27, 0x8ba30b8c, 0x3000010}, | ||
| 12792 | {0x3000000, 0x9503366, 0x8ba98d7a, 0x8ba30bdf, 0x3000010}, | ||
| 12793 | {0x3000000, 0x9503366, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 12794 | {0x3000000, 0x9503366, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 12795 | {0x3000000, 0x9503366, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 12796 | {0x3000000, 0x9503366, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12797 | {0x3000000, 0x9503366, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12798 | {0x3000000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12799 | {0x3000000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12800 | {0x3000000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12801 | {0x3000000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12802 | {0x3000000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12803 | {0x3000000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 12804 | {0x3000000, 0x9503366, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 12805 | {0x3000000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 12806 | {0x3000000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 12807 | {0x3000000, 0x9503366, 0x9503366, 0x9d03366, 0x3000000}, | ||
| 12808 | {0x3000000, 0x9503366, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 12809 | {0x3000000, 0x9503366, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 12810 | {0x3000000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 12811 | {0x3000000, 0x9503366, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 12812 | {0x3000000, 0x9503366, 0x966320b, 0x9db32b8, 0x3000010}, | ||
| 12813 | {0x3000000, 0x9503366, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 12814 | {0x3000000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 12815 | {0x3000000, 0x9503366, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 12816 | {0x3000000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 12817 | {0x3000000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 12818 | {0x3000000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 12819 | {0x3000000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3000000}, | ||
| 12820 | {0x3000000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3000080}, | ||
| 12821 | {0x3000000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3000080}, | ||
| 12822 | {0x3000000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3000080}, | ||
| 12823 | {0x3000000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3000080}, | ||
| 12824 | {0x3000000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3000080}, | ||
| 12825 | {0x3000000, 0xbf5a97c9, 0x800000, 0xbf5a97c9, 0x3000010}, | ||
| 12826 | {0x3000000, 0xbf5a97c9, 0x800002, 0xbf5a97c9, 0x3000010}, | ||
| 12827 | {0x3000000, 0xbf5a97c9, 0x1398437, 0xbf5a97c9, 0x3000010}, | ||
| 12828 | {0x3000000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c9, 0x3000010}, | ||
| 12829 | {0x3000000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c9, 0x3000010}, | ||
| 12830 | {0x3000000, 0xbf5a97c9, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 12831 | {0x3000000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 12832 | {0x3000000, 0xbf5a97c9, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 12833 | {0x3000000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12834 | {0x3000000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12835 | {0x3000000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12836 | {0x3000000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12837 | {0x3000000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12838 | {0x3000000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12839 | {0x3000000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12840 | {0x3000000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3000000}, | ||
| 12841 | {0x3000000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3000080}, | ||
| 12842 | {0x3000000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3000080}, | ||
| 12843 | {0x3000000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3000080}, | ||
| 12844 | {0x3000000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3000080}, | ||
| 12845 | {0x3000000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3000080}, | ||
| 12846 | {0x3000000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3000010}, | ||
| 12847 | {0x3000000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3000010}, | ||
| 12848 | {0x3000000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3000010}, | ||
| 12849 | {0x3000000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3000010}, | ||
| 12850 | {0x3000000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3000010}, | ||
| 12851 | {0x3000000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 12852 | {0x3000000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 12853 | {0x3000000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 12854 | {0x3000000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12855 | {0x3000000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12856 | {0x3000000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12857 | {0x3000000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12858 | {0x3000000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12859 | {0x3000000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12860 | {0x3000000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12861 | {0x3000000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 12862 | {0x3000000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 12863 | {0x3000000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 12864 | {0x3000000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 12865 | {0x3000000, 0xbf5a97c9, 0x9503366, 0xbf5a97c9, 0x3000010}, | ||
| 12866 | {0x3000000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3000000}, | ||
| 12867 | {0x3000000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 12868 | {0x3000000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 12869 | {0x3000000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3000010}, | ||
| 12870 | {0x3000000, 0xbf5a97c9, 0x966320b, 0xbf5a97c9, 0x3000010}, | ||
| 12871 | {0x3000000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3000010}, | ||
| 12872 | {0x3000000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3000010}, | ||
| 12873 | {0x3000000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c9, 0x3000010}, | ||
| 12874 | {0x3000000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3000010}, | ||
| 12875 | {0x3000000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 12876 | {0x3000000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 12877 | {0x3000000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3000000}, | ||
| 12878 | {0x3000000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3000080}, | ||
| 12879 | {0x3000000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3000080}, | ||
| 12880 | {0x3000000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3000080}, | ||
| 12881 | {0x3000000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3000080}, | ||
| 12882 | {0x3000000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3000080}, | ||
| 12883 | {0x3000000, 0xe6ff1a14, 0x800000, 0xe6ff1a14, 0x3000010}, | ||
| 12884 | {0x3000000, 0xe6ff1a14, 0x800002, 0xe6ff1a14, 0x3000010}, | ||
| 12885 | {0x3000000, 0xe6ff1a14, 0x1398437, 0xe6ff1a14, 0x3000010}, | ||
| 12886 | {0x3000000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a14, 0x3000010}, | ||
| 12887 | {0x3000000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a14, 0x3000010}, | ||
| 12888 | {0x3000000, 0xe6ff1a14, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 12889 | {0x3000000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 12890 | {0x3000000, 0xe6ff1a14, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 12891 | {0x3000000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12892 | {0x3000000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12893 | {0x3000000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12894 | {0x3000000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12895 | {0x3000000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12896 | {0x3000000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12897 | {0x3000000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12898 | {0x3000000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3000000}, | ||
| 12899 | {0x3000000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3000080}, | ||
| 12900 | {0x3000000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3000080}, | ||
| 12901 | {0x3000000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3000080}, | ||
| 12902 | {0x3000000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3000080}, | ||
| 12903 | {0x3000000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3000080}, | ||
| 12904 | {0x3000000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3000010}, | ||
| 12905 | {0x3000000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3000010}, | ||
| 12906 | {0x3000000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3000010}, | ||
| 12907 | {0x3000000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3000010}, | ||
| 12908 | {0x3000000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3000010}, | ||
| 12909 | {0x3000000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 12910 | {0x3000000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 12911 | {0x3000000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 12912 | {0x3000000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12913 | {0x3000000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12914 | {0x3000000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12915 | {0x3000000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12916 | {0x3000000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12917 | {0x3000000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12918 | {0x3000000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12919 | {0x3000000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a14, 0x3000010}, | ||
| 12920 | {0x3000000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3000000}, | ||
| 12921 | {0x3000000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 12922 | {0x3000000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3000010}, | ||
| 12923 | {0x3000000, 0xe6ff1a14, 0x9503366, 0xe6ff1a14, 0x3000010}, | ||
| 12924 | {0x3000000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3000010}, | ||
| 12925 | {0x3000000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3000000}, | ||
| 12926 | {0x3000000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 12927 | {0x3000000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3000010}, | ||
| 12928 | {0x3000000, 0xe6ff1a14, 0x966320b, 0xe6ff1a14, 0x3000010}, | ||
| 12929 | {0x3000000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3000010}, | ||
| 12930 | {0x3000000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3000010}, | ||
| 12931 | {0x3000000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a14, 0x3000010}, | ||
| 12932 | {0x3000000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a14, 0x3000010}, | ||
| 12933 | {0x3000000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a14, 0x3000010}, | ||
| 12934 | {0x3000000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 12935 | {0x3000000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3000000}, | ||
| 12936 | {0x3000000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3000080}, | ||
| 12937 | {0x3000000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3000080}, | ||
| 12938 | {0x3000000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3000080}, | ||
| 12939 | {0x3000000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3000080}, | ||
| 12940 | {0x3000000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3000080}, | ||
| 12941 | {0x3000000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3000010}, | ||
| 12942 | {0x3000000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3000010}, | ||
| 12943 | {0x3000000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3000010}, | ||
| 12944 | {0x3000000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3000010}, | ||
| 12945 | {0x3000000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3000010}, | ||
| 12946 | {0x3000000, 0x77f31e2f, 0x751f853a, 0x77f81a59, 0x3000010}, | ||
| 12947 | {0x3000000, 0x77f31e2f, 0x7f7ffff0, 0x7f800000, 0x3000014}, | ||
| 12948 | {0x3000000, 0x77f31e2f, 0x7f7fffff, 0x7f800000, 0x3000014}, | ||
| 12949 | {0x3000000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 12950 | {0x3000000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 12951 | {0x3000000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 12952 | {0x3000000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 12953 | {0x3000000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 12954 | {0x3000000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12955 | {0x3000000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 12956 | {0x3000000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3000000}, | ||
| 12957 | {0x3000000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3000080}, | ||
| 12958 | {0x3000000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3000080}, | ||
| 12959 | {0x3000000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3000080}, | ||
| 12960 | {0x3000000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3000080}, | ||
| 12961 | {0x3000000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3000080}, | ||
| 12962 | {0x3000000, 0x77f31e2f, 0x80800000, 0x77f31e2f, 0x3000010}, | ||
| 12963 | {0x3000000, 0x77f31e2f, 0x80800002, 0x77f31e2f, 0x3000010}, | ||
| 12964 | {0x3000000, 0x77f31e2f, 0x81398437, 0x77f31e2f, 0x3000010}, | ||
| 12965 | {0x3000000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2f, 0x3000010}, | ||
| 12966 | {0x3000000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2f, 0x3000010}, | ||
| 12967 | {0x3000000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3000010}, | ||
| 12968 | {0x3000000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe0a, 0x3000010}, | ||
| 12969 | {0x3000000, 0x77f31e2f, 0xff7fffff, 0xff7ffe19, 0x3000010}, | ||
| 12970 | {0x3000000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3000000}, | ||
| 12971 | {0x3000000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 12972 | {0x3000000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 12973 | {0x3000000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 12974 | {0x3000000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 12975 | {0x3000000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 12976 | {0x3000000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 12977 | {0x3000000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3000010}, | ||
| 12978 | {0x3000000, 0x77f31e2f, 0xe73a5134, 0x77f31e2f, 0x3000010}, | ||
| 12979 | {0x3000000, 0x77f31e2f, 0x7c994e9e, 0x7c998b66, 0x3000010}, | ||
| 12980 | {0x3000000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3000010}, | ||
| 12981 | {0x3000000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3000010}, | ||
| 12982 | {0x3000000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2f, 0x3000010}, | ||
| 12983 | {0x3000000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2f, 0x3000010}, | ||
| 12984 | {0x3000000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3000000}, | ||
| 12985 | {0x3000000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2f, 0x3000010}, | ||
| 12986 | {0x3000000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3000010}, | ||
| 12987 | {0x3000000, 0x77f31e2f, 0xb26bddee, 0x77f31e2f, 0x3000010}, | ||
| 12988 | {0x3000000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2f, 0x3000010}, | ||
| 12989 | {0x3000000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3000010}, | ||
| 12990 | {0x3000000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3000010}, | ||
| 12991 | {0x3000000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3000010}, | ||
| 12992 | {0x3000000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3000010}, | ||
| 12993 | {0x3000000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3000000}, | ||
| 12994 | {0x3000000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3000080}, | ||
| 12995 | {0x3000000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3000080}, | ||
| 12996 | {0x3000000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3000080}, | ||
| 12997 | {0x3000000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3000080}, | ||
| 12998 | {0x3000000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3000080}, | ||
| 12999 | {0x3000000, 0xaab4d7d8, 0x800000, 0xaab4d7d8, 0x3000010}, | ||
| 13000 | {0x3000000, 0xaab4d7d8, 0x800002, 0xaab4d7d8, 0x3000010}, | ||
| 13001 | {0x3000000, 0xaab4d7d8, 0x1398437, 0xaab4d7d8, 0x3000010}, | ||
| 13002 | {0x3000000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d8, 0x3000010}, | ||
| 13003 | {0x3000000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d8, 0x3000010}, | ||
| 13004 | {0x3000000, 0xaab4d7d8, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 13005 | {0x3000000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 13006 | {0x3000000, 0xaab4d7d8, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 13007 | {0x3000000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 13008 | {0x3000000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 13009 | {0x3000000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 13010 | {0x3000000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 13011 | {0x3000000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 13012 | {0x3000000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13013 | {0x3000000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 13014 | {0x3000000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3000000}, | ||
| 13015 | {0x3000000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3000080}, | ||
| 13016 | {0x3000000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3000080}, | ||
| 13017 | {0x3000000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3000080}, | ||
| 13018 | {0x3000000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3000080}, | ||
| 13019 | {0x3000000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3000080}, | ||
| 13020 | {0x3000000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3000010}, | ||
| 13021 | {0x3000000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3000010}, | ||
| 13022 | {0x3000000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3000010}, | ||
| 13023 | {0x3000000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3000010}, | ||
| 13024 | {0x3000000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3000010}, | ||
| 13025 | {0x3000000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 13026 | {0x3000000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 13027 | {0x3000000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 13028 | {0x3000000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3000000}, | ||
| 13029 | {0x3000000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 13030 | {0x3000000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 13031 | {0x3000000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 13032 | {0x3000000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 13033 | {0x3000000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13034 | {0x3000000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 13035 | {0x3000000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 13036 | {0x3000000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 13037 | {0x3000000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 13038 | {0x3000000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 13039 | {0x3000000, 0xaab4d7d8, 0x9503366, 0xaab4d7d8, 0x3000010}, | ||
| 13040 | {0x3000000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 13041 | {0x3000000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 13042 | {0x3000000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 13043 | {0x3000000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3000000}, | ||
| 13044 | {0x3000000, 0xaab4d7d8, 0x966320b, 0xaab4d7d8, 0x3000010}, | ||
| 13045 | {0x3000000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf58, 0x3000010}, | ||
| 13046 | {0x3000000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d6, 0x3000010}, | ||
| 13047 | {0x3000000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3000010}, | ||
| 13048 | {0x3000000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 13049 | {0x3000000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 13050 | {0x3000000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 13051 | {0x3000000, 0x966320b, 0x0, 0x966320b, 0x3000000}, | ||
| 13052 | {0x3000000, 0x966320b, 0x1, 0x966320b, 0x3000080}, | ||
| 13053 | {0x3000000, 0x966320b, 0x76, 0x966320b, 0x3000080}, | ||
| 13054 | {0x3000000, 0x966320b, 0x2b94, 0x966320b, 0x3000080}, | ||
| 13055 | {0x3000000, 0x966320b, 0x636d24, 0x966320b, 0x3000080}, | ||
| 13056 | {0x3000000, 0x966320b, 0x7fffff, 0x966320b, 0x3000080}, | ||
| 13057 | {0x3000000, 0x966320b, 0x800000, 0x966324b, 0x3000000}, | ||
| 13058 | {0x3000000, 0x966320b, 0x800002, 0x966324b, 0x3000010}, | ||
| 13059 | {0x3000000, 0x966320b, 0x1398437, 0x96632c5, 0x3000010}, | ||
| 13060 | {0x3000000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3000010}, | ||
| 13061 | {0x3000000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3000010}, | ||
| 13062 | {0x3000000, 0x966320b, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 13063 | {0x3000000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 13064 | {0x3000000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 13065 | {0x3000000, 0x966320b, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 13066 | {0x3000000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 13067 | {0x3000000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 13068 | {0x3000000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 13069 | {0x3000000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 13070 | {0x3000000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13071 | {0x3000000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 13072 | {0x3000000, 0x966320b, 0x80000000, 0x966320b, 0x3000000}, | ||
| 13073 | {0x3000000, 0x966320b, 0x80000001, 0x966320b, 0x3000080}, | ||
| 13074 | {0x3000000, 0x966320b, 0x80000076, 0x966320b, 0x3000080}, | ||
| 13075 | {0x3000000, 0x966320b, 0x80002b94, 0x966320b, 0x3000080}, | ||
| 13076 | {0x3000000, 0x966320b, 0x80636d24, 0x966320b, 0x3000080}, | ||
| 13077 | {0x3000000, 0x966320b, 0x807fffff, 0x966320b, 0x3000080}, | ||
| 13078 | {0x3000000, 0x966320b, 0x80800000, 0x96631cb, 0x3000000}, | ||
| 13079 | {0x3000000, 0x966320b, 0x80800002, 0x96631cb, 0x3000010}, | ||
| 13080 | {0x3000000, 0x966320b, 0x81398437, 0x9663151, 0x3000010}, | ||
| 13081 | {0x3000000, 0x966320b, 0x8ba98d27, 0x8ba25b97, 0x3000010}, | ||
| 13082 | {0x3000000, 0x966320b, 0x8ba98d7a, 0x8ba25bea, 0x3000010}, | ||
| 13083 | {0x3000000, 0x966320b, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 13084 | {0x3000000, 0x966320b, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 13085 | {0x3000000, 0x966320b, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 13086 | {0x3000000, 0x966320b, 0xff800000, 0xff800000, 0x3000000}, | ||
| 13087 | {0x3000000, 0x966320b, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 13088 | {0x3000000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 13089 | {0x3000000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 13090 | {0x3000000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 13091 | {0x3000000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13092 | {0x3000000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 13093 | {0x3000000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 13094 | {0x3000000, 0x966320b, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 13095 | {0x3000000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 13096 | {0x3000000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 13097 | {0x3000000, 0x966320b, 0x9503366, 0x9db32b8, 0x3000010}, | ||
| 13098 | {0x3000000, 0x966320b, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 13099 | {0x3000000, 0x966320b, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 13100 | {0x3000000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 13101 | {0x3000000, 0x966320b, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, | ||
| 13102 | {0x3000000, 0x966320b, 0x966320b, 0x9e6320b, 0x3000000}, | ||
| 13103 | {0x3000000, 0x966320b, 0xb26bddee, 0xb26bddee, 0x3000010}, | ||
| 13104 | {0x3000000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, | ||
| 13105 | {0x3000000, 0x966320b, 0x317285d3, 0x317285d3, 0x3000010}, | ||
| 13106 | {0x3000000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3000010}, | ||
| 13107 | {0x3000000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 13108 | {0x3000000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 13109 | {0x3000000, 0xb26bddee, 0x0, 0xb26bddee, 0x3000000}, | ||
| 13110 | {0x3000000, 0xb26bddee, 0x1, 0xb26bddee, 0x3000080}, | ||
| 13111 | {0x3000000, 0xb26bddee, 0x76, 0xb26bddee, 0x3000080}, | ||
| 13112 | {0x3000000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3000080}, | ||
| 13113 | {0x3000000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3000080}, | ||
| 13114 | {0x3000000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3000080}, | ||
| 13115 | {0x3000000, 0xb26bddee, 0x800000, 0xb26bddee, 0x3000010}, | ||
| 13116 | {0x3000000, 0xb26bddee, 0x800002, 0xb26bddee, 0x3000010}, | ||
| 13117 | {0x3000000, 0xb26bddee, 0x1398437, 0xb26bddee, 0x3000010}, | ||
| 13118 | {0x3000000, 0xb26bddee, 0xba98d27, 0xb26bddee, 0x3000010}, | ||
| 13119 | {0x3000000, 0xb26bddee, 0xba98d7a, 0xb26bddee, 0x3000010}, | ||
| 13120 | {0x3000000, 0xb26bddee, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 13121 | {0x3000000, 0xb26bddee, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 13122 | {0x3000000, 0xb26bddee, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 13123 | {0x3000000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 13124 | {0x3000000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 13125 | {0x3000000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 13126 | {0x3000000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 13127 | {0x3000000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 13128 | {0x3000000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13129 | {0x3000000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 13130 | {0x3000000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3000000}, | ||
| 13131 | {0x3000000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3000080}, | ||
| 13132 | {0x3000000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3000080}, | ||
| 13133 | {0x3000000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3000080}, | ||
| 13134 | {0x3000000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3000080}, | ||
| 13135 | {0x3000000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3000080}, | ||
| 13136 | {0x3000000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3000010}, | ||
| 13137 | {0x3000000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3000010}, | ||
| 13138 | {0x3000000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3000010}, | ||
| 13139 | {0x3000000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3000010}, | ||
| 13140 | {0x3000000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3000010}, | ||
| 13141 | {0x3000000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 13142 | {0x3000000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 13143 | {0x3000000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 13144 | {0x3000000, 0xb26bddee, 0xff800000, 0xff800000, 0x3000000}, | ||
| 13145 | {0x3000000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 13146 | {0x3000000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 13147 | {0x3000000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 13148 | {0x3000000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 13149 | {0x3000000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13150 | {0x3000000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 13151 | {0x3000000, 0xb26bddee, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 13152 | {0x3000000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 13153 | {0x3000000, 0xb26bddee, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 13154 | {0x3000000, 0xb26bddee, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 13155 | {0x3000000, 0xb26bddee, 0x9503366, 0xb26bddee, 0x3000010}, | ||
| 13156 | {0x3000000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 13157 | {0x3000000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 13158 | {0x3000000, 0xb26bddee, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 13159 | {0x3000000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf58, 0x3000010}, | ||
| 13160 | {0x3000000, 0xb26bddee, 0x966320b, 0xb26bddee, 0x3000010}, | ||
| 13161 | {0x3000000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3000000}, | ||
| 13162 | {0x3000000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8f, 0x3000010}, | ||
| 13163 | {0x3000000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3000010}, | ||
| 13164 | {0x3000000, 0xb26bddee, 0x3c9623b1, 0x3c9623aa, 0x3000010}, | ||
| 13165 | {0x3000000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 13166 | {0x3000000, 0xb26bddee, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 13167 | {0x3000000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3000000}, | ||
| 13168 | {0x3000000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3000080}, | ||
| 13169 | {0x3000000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3000080}, | ||
| 13170 | {0x3000000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3000080}, | ||
| 13171 | {0x3000000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3000080}, | ||
| 13172 | {0x3000000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3000080}, | ||
| 13173 | {0x3000000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d3, 0x3000010}, | ||
| 13174 | {0x3000000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d3, 0x3000010}, | ||
| 13175 | {0x3000000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d3, 0x3000010}, | ||
| 13176 | {0x3000000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d3, 0x3000010}, | ||
| 13177 | {0x3000000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d3, 0x3000010}, | ||
| 13178 | {0x3000000, 0xb5c8e5d3, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 13179 | {0x3000000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 13180 | {0x3000000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 13181 | {0x3000000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 13182 | {0x3000000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 13183 | {0x3000000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 13184 | {0x3000000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 13185 | {0x3000000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 13186 | {0x3000000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13187 | {0x3000000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 13188 | {0x3000000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3000000}, | ||
| 13189 | {0x3000000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3000080}, | ||
| 13190 | {0x3000000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3000080}, | ||
| 13191 | {0x3000000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3000080}, | ||
| 13192 | {0x3000000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3000080}, | ||
| 13193 | {0x3000000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3000080}, | ||
| 13194 | {0x3000000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3000010}, | ||
| 13195 | {0x3000000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3000010}, | ||
| 13196 | {0x3000000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3000010}, | ||
| 13197 | {0x3000000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3000010}, | ||
| 13198 | {0x3000000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3000010}, | ||
| 13199 | {0x3000000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 13200 | {0x3000000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 13201 | {0x3000000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 13202 | {0x3000000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3000000}, | ||
| 13203 | {0x3000000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 13204 | {0x3000000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 13205 | {0x3000000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 13206 | {0x3000000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 13207 | {0x3000000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13208 | {0x3000000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 13209 | {0x3000000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 13210 | {0x3000000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 13211 | {0x3000000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 13212 | {0x3000000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 13213 | {0x3000000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d3, 0x3000010}, | ||
| 13214 | {0x3000000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3000010}, | ||
| 13215 | {0x3000000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 13216 | {0x3000000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 13217 | {0x3000000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d6, 0x3000010}, | ||
| 13218 | {0x3000000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d3, 0x3000010}, | ||
| 13219 | {0x3000000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8f, 0x3000010}, | ||
| 13220 | {0x3000000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3000000}, | ||
| 13221 | {0x3000000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3000010}, | ||
| 13222 | {0x3000000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3000010}, | ||
| 13223 | {0x3000000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 13224 | {0x3000000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 13225 | {0x3000000, 0x317285d3, 0x0, 0x317285d3, 0x3000000}, | ||
| 13226 | {0x3000000, 0x317285d3, 0x1, 0x317285d3, 0x3000080}, | ||
| 13227 | {0x3000000, 0x317285d3, 0x76, 0x317285d3, 0x3000080}, | ||
| 13228 | {0x3000000, 0x317285d3, 0x2b94, 0x317285d3, 0x3000080}, | ||
| 13229 | {0x3000000, 0x317285d3, 0x636d24, 0x317285d3, 0x3000080}, | ||
| 13230 | {0x3000000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3000080}, | ||
| 13231 | {0x3000000, 0x317285d3, 0x800000, 0x317285d3, 0x3000010}, | ||
| 13232 | {0x3000000, 0x317285d3, 0x800002, 0x317285d3, 0x3000010}, | ||
| 13233 | {0x3000000, 0x317285d3, 0x1398437, 0x317285d3, 0x3000010}, | ||
| 13234 | {0x3000000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3000010}, | ||
| 13235 | {0x3000000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3000010}, | ||
| 13236 | {0x3000000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 13237 | {0x3000000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 13238 | {0x3000000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 13239 | {0x3000000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 13240 | {0x3000000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 13241 | {0x3000000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 13242 | {0x3000000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 13243 | {0x3000000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 13244 | {0x3000000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13245 | {0x3000000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 13246 | {0x3000000, 0x317285d3, 0x80000000, 0x317285d3, 0x3000000}, | ||
| 13247 | {0x3000000, 0x317285d3, 0x80000001, 0x317285d3, 0x3000080}, | ||
| 13248 | {0x3000000, 0x317285d3, 0x80000076, 0x317285d3, 0x3000080}, | ||
| 13249 | {0x3000000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3000080}, | ||
| 13250 | {0x3000000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3000080}, | ||
| 13251 | {0x3000000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3000080}, | ||
| 13252 | {0x3000000, 0x317285d3, 0x80800000, 0x317285d3, 0x3000010}, | ||
| 13253 | {0x3000000, 0x317285d3, 0x80800002, 0x317285d3, 0x3000010}, | ||
| 13254 | {0x3000000, 0x317285d3, 0x81398437, 0x317285d3, 0x3000010}, | ||
| 13255 | {0x3000000, 0x317285d3, 0x8ba98d27, 0x317285d3, 0x3000010}, | ||
| 13256 | {0x3000000, 0x317285d3, 0x8ba98d7a, 0x317285d3, 0x3000010}, | ||
| 13257 | {0x3000000, 0x317285d3, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 13258 | {0x3000000, 0x317285d3, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 13259 | {0x3000000, 0x317285d3, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 13260 | {0x3000000, 0x317285d3, 0xff800000, 0xff800000, 0x3000000}, | ||
| 13261 | {0x3000000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 13262 | {0x3000000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 13263 | {0x3000000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 13264 | {0x3000000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 13265 | {0x3000000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13266 | {0x3000000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 13267 | {0x3000000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 13268 | {0x3000000, 0x317285d3, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 13269 | {0x3000000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 13270 | {0x3000000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 13271 | {0x3000000, 0x317285d3, 0x9503366, 0x317285d3, 0x3000010}, | ||
| 13272 | {0x3000000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, | ||
| 13273 | {0x3000000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 13274 | {0x3000000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 13275 | {0x3000000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3000010}, | ||
| 13276 | {0x3000000, 0x317285d3, 0x966320b, 0x317285d3, 0x3000010}, | ||
| 13277 | {0x3000000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3000010}, | ||
| 13278 | {0x3000000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3000010}, | ||
| 13279 | {0x3000000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3000000}, | ||
| 13280 | {0x3000000, 0x317285d3, 0x3c9623b1, 0x3c9623b3, 0x3000010}, | ||
| 13281 | {0x3000000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 13282 | {0x3000000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 13283 | {0x3000000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3000000}, | ||
| 13284 | {0x3000000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3000080}, | ||
| 13285 | {0x3000000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3000080}, | ||
| 13286 | {0x3000000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3000080}, | ||
| 13287 | {0x3000000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3000080}, | ||
| 13288 | {0x3000000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3000080}, | ||
| 13289 | {0x3000000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3000010}, | ||
| 13290 | {0x3000000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3000010}, | ||
| 13291 | {0x3000000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3000010}, | ||
| 13292 | {0x3000000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3000010}, | ||
| 13293 | {0x3000000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3000010}, | ||
| 13294 | {0x3000000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 13295 | {0x3000000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 13296 | {0x3000000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 13297 | {0x3000000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 13298 | {0x3000000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 13299 | {0x3000000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 13300 | {0x3000000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 13301 | {0x3000000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 13302 | {0x3000000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13303 | {0x3000000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 13304 | {0x3000000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3000000}, | ||
| 13305 | {0x3000000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3000080}, | ||
| 13306 | {0x3000000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3000080}, | ||
| 13307 | {0x3000000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3000080}, | ||
| 13308 | {0x3000000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3000080}, | ||
| 13309 | {0x3000000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3000080}, | ||
| 13310 | {0x3000000, 0x3c9623b1, 0x80800000, 0x3c9623b1, 0x3000010}, | ||
| 13311 | {0x3000000, 0x3c9623b1, 0x80800002, 0x3c9623b1, 0x3000010}, | ||
| 13312 | {0x3000000, 0x3c9623b1, 0x81398437, 0x3c9623b1, 0x3000010}, | ||
| 13313 | {0x3000000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b1, 0x3000010}, | ||
| 13314 | {0x3000000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b1, 0x3000010}, | ||
| 13315 | {0x3000000, 0x3c9623b1, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 13316 | {0x3000000, 0x3c9623b1, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 13317 | {0x3000000, 0x3c9623b1, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 13318 | {0x3000000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3000000}, | ||
| 13319 | {0x3000000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 13320 | {0x3000000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 13321 | {0x3000000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 13322 | {0x3000000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 13323 | {0x3000000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13324 | {0x3000000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 13325 | {0x3000000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3000010}, | ||
| 13326 | {0x3000000, 0x3c9623b1, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 13327 | {0x3000000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 13328 | {0x3000000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 13329 | {0x3000000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3000010}, | ||
| 13330 | {0x3000000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3000010}, | ||
| 13331 | {0x3000000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 13332 | {0x3000000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 13333 | {0x3000000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b1, 0x3000010}, | ||
| 13334 | {0x3000000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3000010}, | ||
| 13335 | {0x3000000, 0x3c9623b1, 0xb26bddee, 0x3c9623aa, 0x3000010}, | ||
| 13336 | {0x3000000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3000010}, | ||
| 13337 | {0x3000000, 0x3c9623b1, 0x317285d3, 0x3c9623b3, 0x3000010}, | ||
| 13338 | {0x3000000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3000000}, | ||
| 13339 | {0x3000000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, | ||
| 13340 | {0x3000000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 13341 | {0x3000000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3000000}, | ||
| 13342 | {0x3000000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3000080}, | ||
| 13343 | {0x3000000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3000080}, | ||
| 13344 | {0x3000000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3000080}, | ||
| 13345 | {0x3000000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3000080}, | ||
| 13346 | {0x3000000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3000080}, | ||
| 13347 | {0x3000000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3000010}, | ||
| 13348 | {0x3000000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3000010}, | ||
| 13349 | {0x3000000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3000010}, | ||
| 13350 | {0x3000000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3000010}, | ||
| 13351 | {0x3000000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3000010}, | ||
| 13352 | {0x3000000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3000010}, | ||
| 13353 | {0x3000000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, | ||
| 13354 | {0x3000000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3000010}, | ||
| 13355 | {0x3000000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 13356 | {0x3000000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 13357 | {0x3000000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 13358 | {0x3000000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 13359 | {0x3000000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 13360 | {0x3000000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13361 | {0x3000000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 13362 | {0x3000000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3000000}, | ||
| 13363 | {0x3000000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3000080}, | ||
| 13364 | {0x3000000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3000080}, | ||
| 13365 | {0x3000000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3000080}, | ||
| 13366 | {0x3000000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3000080}, | ||
| 13367 | {0x3000000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3000080}, | ||
| 13368 | {0x3000000, 0x51fd2c7c, 0x80800000, 0x51fd2c7c, 0x3000010}, | ||
| 13369 | {0x3000000, 0x51fd2c7c, 0x80800002, 0x51fd2c7c, 0x3000010}, | ||
| 13370 | {0x3000000, 0x51fd2c7c, 0x81398437, 0x51fd2c7c, 0x3000010}, | ||
| 13371 | {0x3000000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7c, 0x3000010}, | ||
| 13372 | {0x3000000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7c, 0x3000010}, | ||
| 13373 | {0x3000000, 0x51fd2c7c, 0xf51f853a, 0xf51f853a, 0x3000010}, | ||
| 13374 | {0x3000000, 0x51fd2c7c, 0xff7ffff0, 0xff7ffff0, 0x3000010}, | ||
| 13375 | {0x3000000, 0x51fd2c7c, 0xff7fffff, 0xff7fffff, 0x3000010}, | ||
| 13376 | {0x3000000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3000000}, | ||
| 13377 | {0x3000000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 13378 | {0x3000000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 13379 | {0x3000000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 13380 | {0x3000000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 13381 | {0x3000000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13382 | {0x3000000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 13383 | {0x3000000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3000010}, | ||
| 13384 | {0x3000000, 0x51fd2c7c, 0xe73a5134, 0xe73a5134, 0x3000010}, | ||
| 13385 | {0x3000000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3000010}, | ||
| 13386 | {0x3000000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3000010}, | ||
| 13387 | {0x3000000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3000010}, | ||
| 13388 | {0x3000000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7c, 0x3000010}, | ||
| 13389 | {0x3000000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, | ||
| 13390 | {0x3000000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3000010}, | ||
| 13391 | {0x3000000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7c, 0x3000010}, | ||
| 13392 | {0x3000000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3000010}, | ||
| 13393 | {0x3000000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7c, 0x3000010}, | ||
| 13394 | {0x3000000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7c, 0x3000010}, | ||
| 13395 | {0x3000000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3000010}, | ||
| 13396 | {0x3000000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3000010}, | ||
| 13397 | {0x3000000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3000000}, | ||
| 13398 | {0x3000000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3000010}, | ||
| 13399 | {0x3000000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3000000}, | ||
| 13400 | {0x3000000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3000080}, | ||
| 13401 | {0x3000000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3000080}, | ||
| 13402 | {0x3000000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3000080}, | ||
| 13403 | {0x3000000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3000080}, | ||
| 13404 | {0x3000000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3000080}, | ||
| 13405 | {0x3000000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3000010}, | ||
| 13406 | {0x3000000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3000010}, | ||
| 13407 | {0x3000000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3000010}, | ||
| 13408 | {0x3000000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3000010}, | ||
| 13409 | {0x3000000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3000010}, | ||
| 13410 | {0x3000000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3000010}, | ||
| 13411 | {0x3000000, 0x7b906a6c, 0x7f7ffff0, 0x7f800000, 0x3000014}, | ||
| 13412 | {0x3000000, 0x7b906a6c, 0x7f7fffff, 0x7f800000, 0x3000014}, | ||
| 13413 | {0x3000000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3000000}, | ||
| 13414 | {0x3000000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3000001}, | ||
| 13415 | {0x3000000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3000001}, | ||
| 13416 | {0x3000000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3000001}, | ||
| 13417 | {0x3000000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3000000}, | ||
| 13418 | {0x3000000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13419 | {0x3000000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3000000}, | ||
| 13420 | {0x3000000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3000000}, | ||
| 13421 | {0x3000000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3000080}, | ||
| 13422 | {0x3000000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3000080}, | ||
| 13423 | {0x3000000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3000080}, | ||
| 13424 | {0x3000000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3000080}, | ||
| 13425 | {0x3000000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3000080}, | ||
| 13426 | {0x3000000, 0x7b906a6c, 0x80800000, 0x7b906a6c, 0x3000010}, | ||
| 13427 | {0x3000000, 0x7b906a6c, 0x80800002, 0x7b906a6c, 0x3000010}, | ||
| 13428 | {0x3000000, 0x7b906a6c, 0x81398437, 0x7b906a6c, 0x3000010}, | ||
| 13429 | {0x3000000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6c, 0x3000010}, | ||
| 13430 | {0x3000000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6c, 0x3000010}, | ||
| 13431 | {0x3000000, 0x7b906a6c, 0xf51f853a, 0x7b906570, 0x3000010}, | ||
| 13432 | {0x3000000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3000010}, | ||
| 13433 | {0x3000000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3000010}, | ||
| 13434 | {0x3000000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3000000}, | ||
| 13435 | {0x3000000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3000001}, | ||
| 13436 | {0x3000000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3000001}, | ||
| 13437 | {0x3000000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3000001}, | ||
| 13438 | {0x3000000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3000000}, | ||
| 13439 | {0x3000000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3000000}, | ||
| 13440 | {0x3000000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3000000}, | ||
| 13441 | {0x3000000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3000010}, | ||
| 13442 | {0x3000000, 0x7b906a6c, 0xe73a5134, 0x7b906a6c, 0x3000010}, | ||
| 13443 | {0x3000000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3000000}, | ||
| 13444 | {0x3000000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3000010}, | ||
| 13445 | {0x3000000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3000010}, | ||
| 13446 | {0x3000000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6c, 0x3000010}, | ||
| 13447 | {0x3000000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6c, 0x3000010}, | ||
| 13448 | {0x3000000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3000010}, | ||
| 13449 | {0x3000000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6c, 0x3000010}, | ||
| 13450 | {0x3000000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3000010}, | ||
| 13451 | {0x3000000, 0x7b906a6c, 0xb26bddee, 0x7b906a6c, 0x3000010}, | ||
| 13452 | {0x3000000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6c, 0x3000010}, | ||
| 13453 | {0x3000000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3000010}, | ||
| 13454 | {0x3000000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3000010}, | ||
| 13455 | {0x3000000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3000010}, | ||
| 13456 | {0x3000000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3000000}, | ||
diff --git a/src/tests/core/memory/memory.cpp b/src/tests/core/memory/memory.cpp new file mode 100644 index 000000000..671afb702 --- /dev/null +++ b/src/tests/core/memory/memory.cpp | |||
| @@ -0,0 +1,56 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <catch.hpp> | ||
| 6 | #include "core/hle/kernel/memory.h" | ||
| 7 | #include "core/hle/kernel/process.h" | ||
| 8 | #include "core/memory.h" | ||
| 9 | |||
| 10 | TEST_CASE("Memory::IsValidVirtualAddress", "[core][memory]") { | ||
| 11 | SECTION("these regions should not be mapped on an empty process") { | ||
| 12 | auto process = Kernel::Process::Create(""); | ||
| 13 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::PROCESS_IMAGE_VADDR) == false); | ||
| 14 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::HEAP_VADDR) == false); | ||
| 15 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::LINEAR_HEAP_VADDR) == false); | ||
| 16 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::VRAM_VADDR) == false); | ||
| 17 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == false); | ||
| 18 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::SHARED_PAGE_VADDR) == false); | ||
| 19 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::TLS_AREA_VADDR) == false); | ||
| 20 | } | ||
| 21 | |||
| 22 | SECTION("CONFIG_MEMORY_VADDR and SHARED_PAGE_VADDR should be valid after mapping them") { | ||
| 23 | auto process = Kernel::Process::Create(""); | ||
| 24 | Kernel::MapSharedPages(process->vm_manager); | ||
| 25 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == true); | ||
| 26 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::SHARED_PAGE_VADDR) == true); | ||
| 27 | } | ||
| 28 | |||
| 29 | SECTION("special regions should be valid after mapping them") { | ||
| 30 | auto process = Kernel::Process::Create(""); | ||
| 31 | SECTION("VRAM") { | ||
| 32 | Kernel::HandleSpecialMapping(process->vm_manager, | ||
| 33 | {Memory::VRAM_VADDR, Memory::VRAM_SIZE, false, false}); | ||
| 34 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::VRAM_VADDR) == true); | ||
| 35 | } | ||
| 36 | |||
| 37 | SECTION("IO (Not yet implemented)") { | ||
| 38 | Kernel::HandleSpecialMapping( | ||
| 39 | process->vm_manager, {Memory::IO_AREA_VADDR, Memory::IO_AREA_SIZE, false, false}); | ||
| 40 | CHECK_FALSE(Memory::IsValidVirtualAddress(*process, Memory::IO_AREA_VADDR) == true); | ||
| 41 | } | ||
| 42 | |||
| 43 | SECTION("DSP") { | ||
| 44 | Kernel::HandleSpecialMapping( | ||
| 45 | process->vm_manager, {Memory::DSP_RAM_VADDR, Memory::DSP_RAM_SIZE, false, false}); | ||
| 46 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::DSP_RAM_VADDR) == true); | ||
| 47 | } | ||
| 48 | } | ||
| 49 | |||
| 50 | SECTION("Unmapping a VAddr should make it invalid") { | ||
| 51 | auto process = Kernel::Process::Create(""); | ||
| 52 | Kernel::MapSharedPages(process->vm_manager); | ||
| 53 | process->vm_manager.UnmapRange(Memory::CONFIG_MEMORY_VADDR, Memory::CONFIG_MEMORY_SIZE); | ||
| 54 | CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == false); | ||
| 55 | } | ||
| 56 | } | ||
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 0961a3251..82f47d8a9 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | set(SRCS | 1 | set(SRCS |
| 2 | command_processor.cpp | 2 | command_processor.cpp |
| 3 | debug_utils/debug_utils.cpp | 3 | debug_utils/debug_utils.cpp |
| 4 | geometry_pipeline.cpp | ||
| 4 | pica.cpp | 5 | pica.cpp |
| 5 | primitive_assembly.cpp | 6 | primitive_assembly.cpp |
| 6 | regs.cpp | 7 | regs.cpp |
| @@ -15,6 +16,7 @@ set(SRCS | |||
| 15 | shader/shader_interpreter.cpp | 16 | shader/shader_interpreter.cpp |
| 16 | swrasterizer/clipper.cpp | 17 | swrasterizer/clipper.cpp |
| 17 | swrasterizer/framebuffer.cpp | 18 | swrasterizer/framebuffer.cpp |
| 19 | swrasterizer/lighting.cpp | ||
| 18 | swrasterizer/proctex.cpp | 20 | swrasterizer/proctex.cpp |
| 19 | swrasterizer/rasterizer.cpp | 21 | swrasterizer/rasterizer.cpp |
| 20 | swrasterizer/swrasterizer.cpp | 22 | swrasterizer/swrasterizer.cpp |
| @@ -28,6 +30,7 @@ set(SRCS | |||
| 28 | set(HEADERS | 30 | set(HEADERS |
| 29 | command_processor.h | 31 | command_processor.h |
| 30 | debug_utils/debug_utils.h | 32 | debug_utils/debug_utils.h |
| 33 | geometry_pipeline.h | ||
| 31 | gpu_debugger.h | 34 | gpu_debugger.h |
| 32 | pica.h | 35 | pica.h |
| 33 | pica_state.h | 36 | pica_state.h |
| @@ -55,6 +58,7 @@ set(HEADERS | |||
| 55 | shader/shader_interpreter.h | 58 | shader/shader_interpreter.h |
| 56 | swrasterizer/clipper.h | 59 | swrasterizer/clipper.h |
| 57 | swrasterizer/framebuffer.h | 60 | swrasterizer/framebuffer.h |
| 61 | swrasterizer/lighting.h | ||
| 58 | swrasterizer/proctex.h | 62 | swrasterizer/proctex.h |
| 59 | swrasterizer/rasterizer.h | 63 | swrasterizer/rasterizer.h |
| 60 | swrasterizer/swrasterizer.h | 64 | swrasterizer/swrasterizer.h |
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index 4633a1df1..caf9f7a06 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp | |||
| @@ -119,24 +119,221 @@ static void WriteUniformFloatReg(ShaderRegs& config, Shader::ShaderSetup& setup, | |||
| 119 | } | 119 | } |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | static void WriteProgramCode(ShaderRegs& config, Shader::ShaderSetup& setup, | 122 | static void LoadDefaultVertexAttributes(u32 register_value) { |
| 123 | unsigned max_program_code_length, u32 value) { | 123 | auto& regs = g_state.regs; |
| 124 | if (config.program.offset >= max_program_code_length) { | 124 | |
| 125 | LOG_ERROR(HW_GPU, "Invalid %s program offset %d", GetShaderSetupTypeName(setup), | 125 | // TODO: Does actual hardware indeed keep an intermediate buffer or does |
| 126 | (int)config.program.offset); | 126 | // it directly write the values? |
| 127 | } else { | 127 | default_attr_write_buffer[default_attr_counter++] = register_value; |
| 128 | setup.program_code[config.program.offset] = value; | 128 | |
| 129 | config.program.offset++; | 129 | // Default attributes are written in a packed format such that four float24 values are encoded |
| 130 | // in three 32-bit numbers. | ||
| 131 | // We write to internal memory once a full such vector is written. | ||
| 132 | if (default_attr_counter >= 3) { | ||
| 133 | default_attr_counter = 0; | ||
| 134 | |||
| 135 | auto& setup = regs.pipeline.vs_default_attributes_setup; | ||
| 136 | |||
| 137 | if (setup.index >= 16) { | ||
| 138 | LOG_ERROR(HW_GPU, "Invalid VS default attribute index %d", (int)setup.index); | ||
| 139 | return; | ||
| 140 | } | ||
| 141 | |||
| 142 | Math::Vec4<float24> attribute; | ||
| 143 | |||
| 144 | // NOTE: The destination component order indeed is "backwards" | ||
| 145 | attribute.w = float24::FromRaw(default_attr_write_buffer[0] >> 8); | ||
| 146 | attribute.z = float24::FromRaw(((default_attr_write_buffer[0] & 0xFF) << 16) | | ||
| 147 | ((default_attr_write_buffer[1] >> 16) & 0xFFFF)); | ||
| 148 | attribute.y = float24::FromRaw(((default_attr_write_buffer[1] & 0xFFFF) << 8) | | ||
| 149 | ((default_attr_write_buffer[2] >> 24) & 0xFF)); | ||
| 150 | attribute.x = float24::FromRaw(default_attr_write_buffer[2] & 0xFFFFFF); | ||
| 151 | |||
| 152 | LOG_TRACE(HW_GPU, "Set default VS attribute %x to (%f %f %f %f)", (int)setup.index, | ||
| 153 | attribute.x.ToFloat32(), attribute.y.ToFloat32(), attribute.z.ToFloat32(), | ||
| 154 | attribute.w.ToFloat32()); | ||
| 155 | |||
| 156 | // TODO: Verify that this actually modifies the register! | ||
| 157 | if (setup.index < 15) { | ||
| 158 | g_state.input_default_attributes.attr[setup.index] = attribute; | ||
| 159 | setup.index++; | ||
| 160 | } else { | ||
| 161 | // Put each attribute into an immediate input buffer. When all specified immediate | ||
| 162 | // attributes are present, the Vertex Shader is invoked and everything is sent to | ||
| 163 | // the primitive assembler. | ||
| 164 | |||
| 165 | auto& immediate_input = g_state.immediate.input_vertex; | ||
| 166 | auto& immediate_attribute_id = g_state.immediate.current_attribute; | ||
| 167 | |||
| 168 | immediate_input.attr[immediate_attribute_id] = attribute; | ||
| 169 | |||
| 170 | if (immediate_attribute_id < regs.pipeline.max_input_attrib_index) { | ||
| 171 | immediate_attribute_id += 1; | ||
| 172 | } else { | ||
| 173 | MICROPROFILE_SCOPE(GPU_Drawing); | ||
| 174 | immediate_attribute_id = 0; | ||
| 175 | |||
| 176 | auto* shader_engine = Shader::GetEngine(); | ||
| 177 | shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); | ||
| 178 | |||
| 179 | // Send to vertex shader | ||
| 180 | if (g_debug_context) | ||
| 181 | g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, | ||
| 182 | static_cast<void*>(&immediate_input)); | ||
| 183 | Shader::UnitState shader_unit; | ||
| 184 | Shader::AttributeBuffer output{}; | ||
| 185 | |||
| 186 | shader_unit.LoadInput(regs.vs, immediate_input); | ||
| 187 | shader_engine->Run(g_state.vs, shader_unit); | ||
| 188 | shader_unit.WriteOutput(regs.vs, output); | ||
| 189 | |||
| 190 | // Send to geometry pipeline | ||
| 191 | if (g_state.immediate.reset_geometry_pipeline) { | ||
| 192 | g_state.geometry_pipeline.Reconfigure(); | ||
| 193 | g_state.immediate.reset_geometry_pipeline = false; | ||
| 194 | } | ||
| 195 | ASSERT(!g_state.geometry_pipeline.NeedIndexInput()); | ||
| 196 | g_state.geometry_pipeline.Setup(shader_engine); | ||
| 197 | g_state.geometry_pipeline.SubmitVertex(output); | ||
| 198 | |||
| 199 | // TODO: If drawing after every immediate mode triangle kills performance, | ||
| 200 | // change it to flush triangles whenever a drawing config register changes | ||
| 201 | // See: https://github.com/citra-emu/citra/pull/2866#issuecomment-327011550 | ||
| 202 | VideoCore::g_renderer->Rasterizer()->DrawTriangles(); | ||
| 203 | if (g_debug_context) { | ||
| 204 | g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); | ||
| 205 | } | ||
| 206 | } | ||
| 207 | } | ||
| 130 | } | 208 | } |
| 131 | } | 209 | } |
| 132 | 210 | ||
| 133 | static void WriteSwizzlePatterns(ShaderRegs& config, Shader::ShaderSetup& setup, u32 value) { | 211 | static void Draw(u32 command_id) { |
| 134 | if (config.swizzle_patterns.offset >= setup.swizzle_data.size()) { | 212 | MICROPROFILE_SCOPE(GPU_Drawing); |
| 135 | LOG_ERROR(HW_GPU, "Invalid %s swizzle pattern offset %d", GetShaderSetupTypeName(setup), | 213 | auto& regs = g_state.regs; |
| 136 | (int)config.swizzle_patterns.offset); | 214 | |
| 137 | } else { | 215 | #if PICA_LOG_TEV |
| 138 | setup.swizzle_data[config.swizzle_patterns.offset] = value; | 216 | DebugUtils::DumpTevStageConfig(regs.GetTevStages()); |
| 139 | config.swizzle_patterns.offset++; | 217 | #endif |
| 218 | if (g_debug_context) | ||
| 219 | g_debug_context->OnEvent(DebugContext::Event::IncomingPrimitiveBatch, nullptr); | ||
| 220 | |||
| 221 | // Processes information about internal vertex attributes to figure out how a vertex is | ||
| 222 | // loaded. | ||
| 223 | // Later, these can be compiled and cached. | ||
| 224 | const u32 base_address = regs.pipeline.vertex_attributes.GetPhysicalBaseAddress(); | ||
| 225 | VertexLoader loader(regs.pipeline); | ||
| 226 | |||
| 227 | // Load vertices | ||
| 228 | bool is_indexed = (command_id == PICA_REG_INDEX(pipeline.trigger_draw_indexed)); | ||
| 229 | |||
| 230 | const auto& index_info = regs.pipeline.index_array; | ||
| 231 | const u8* index_address_8 = Memory::GetPhysicalPointer(base_address + index_info.offset); | ||
| 232 | const u16* index_address_16 = reinterpret_cast<const u16*>(index_address_8); | ||
| 233 | bool index_u16 = index_info.format != 0; | ||
| 234 | |||
| 235 | PrimitiveAssembler<Shader::OutputVertex>& primitive_assembler = g_state.primitive_assembler; | ||
| 236 | |||
| 237 | if (g_debug_context && g_debug_context->recorder) { | ||
| 238 | for (int i = 0; i < 3; ++i) { | ||
| 239 | const auto texture = regs.texturing.GetTextures()[i]; | ||
| 240 | if (!texture.enabled) | ||
| 241 | continue; | ||
| 242 | |||
| 243 | u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress()); | ||
| 244 | g_debug_context->recorder->MemoryAccessed( | ||
| 245 | texture_data, Pica::TexturingRegs::NibblesPerPixel(texture.format) * | ||
| 246 | texture.config.width / 2 * texture.config.height, | ||
| 247 | texture.config.GetPhysicalAddress()); | ||
| 248 | } | ||
| 249 | } | ||
| 250 | |||
| 251 | DebugUtils::MemoryAccessTracker memory_accesses; | ||
| 252 | |||
| 253 | // Simple circular-replacement vertex cache | ||
| 254 | // The size has been tuned for optimal balance between hit-rate and the cost of lookup | ||
| 255 | const size_t VERTEX_CACHE_SIZE = 32; | ||
| 256 | std::array<u16, VERTEX_CACHE_SIZE> vertex_cache_ids; | ||
| 257 | std::array<Shader::AttributeBuffer, VERTEX_CACHE_SIZE> vertex_cache; | ||
| 258 | Shader::AttributeBuffer vs_output; | ||
| 259 | |||
| 260 | unsigned int vertex_cache_pos = 0; | ||
| 261 | vertex_cache_ids.fill(-1); | ||
| 262 | |||
| 263 | auto* shader_engine = Shader::GetEngine(); | ||
| 264 | Shader::UnitState shader_unit; | ||
| 265 | |||
| 266 | shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); | ||
| 267 | |||
| 268 | g_state.geometry_pipeline.Reconfigure(); | ||
| 269 | g_state.geometry_pipeline.Setup(shader_engine); | ||
| 270 | if (g_state.geometry_pipeline.NeedIndexInput()) | ||
| 271 | ASSERT(is_indexed); | ||
| 272 | |||
| 273 | for (unsigned int index = 0; index < regs.pipeline.num_vertices; ++index) { | ||
| 274 | // Indexed rendering doesn't use the start offset | ||
| 275 | unsigned int vertex = is_indexed | ||
| 276 | ? (index_u16 ? index_address_16[index] : index_address_8[index]) | ||
| 277 | : (index + regs.pipeline.vertex_offset); | ||
| 278 | |||
| 279 | // -1 is a common special value used for primitive restart. Since it's unknown if | ||
| 280 | // the PICA supports it, and it would mess up the caching, guard against it here. | ||
| 281 | ASSERT(vertex != -1); | ||
| 282 | |||
| 283 | bool vertex_cache_hit = false; | ||
| 284 | |||
| 285 | if (is_indexed) { | ||
| 286 | if (g_state.geometry_pipeline.NeedIndexInput()) { | ||
| 287 | g_state.geometry_pipeline.SubmitIndex(vertex); | ||
| 288 | continue; | ||
| 289 | } | ||
| 290 | |||
| 291 | if (g_debug_context && Pica::g_debug_context->recorder) { | ||
| 292 | int size = index_u16 ? 2 : 1; | ||
| 293 | memory_accesses.AddAccess(base_address + index_info.offset + size * index, size); | ||
| 294 | } | ||
| 295 | |||
| 296 | for (unsigned int i = 0; i < VERTEX_CACHE_SIZE; ++i) { | ||
| 297 | if (vertex == vertex_cache_ids[i]) { | ||
| 298 | vs_output = vertex_cache[i]; | ||
| 299 | vertex_cache_hit = true; | ||
| 300 | break; | ||
| 301 | } | ||
| 302 | } | ||
| 303 | } | ||
| 304 | |||
| 305 | if (!vertex_cache_hit) { | ||
| 306 | // Initialize data for the current vertex | ||
| 307 | Shader::AttributeBuffer input; | ||
| 308 | loader.LoadVertex(base_address, index, vertex, input, memory_accesses); | ||
| 309 | |||
| 310 | // Send to vertex shader | ||
| 311 | if (g_debug_context) | ||
| 312 | g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, | ||
| 313 | (void*)&input); | ||
| 314 | shader_unit.LoadInput(regs.vs, input); | ||
| 315 | shader_engine->Run(g_state.vs, shader_unit); | ||
| 316 | shader_unit.WriteOutput(regs.vs, vs_output); | ||
| 317 | |||
| 318 | if (is_indexed) { | ||
| 319 | vertex_cache[vertex_cache_pos] = vs_output; | ||
| 320 | vertex_cache_ids[vertex_cache_pos] = vertex; | ||
| 321 | vertex_cache_pos = (vertex_cache_pos + 1) % VERTEX_CACHE_SIZE; | ||
| 322 | } | ||
| 323 | } | ||
| 324 | |||
| 325 | // Send to geometry pipeline | ||
| 326 | g_state.geometry_pipeline.SubmitVertex(vs_output); | ||
| 327 | } | ||
| 328 | |||
| 329 | for (auto& range : memory_accesses.ranges) { | ||
| 330 | g_debug_context->recorder->MemoryAccessed(Memory::GetPhysicalPointer(range.first), | ||
| 331 | range.second, range.first); | ||
| 332 | } | ||
| 333 | |||
| 334 | VideoCore::g_renderer->Rasterizer()->DrawTriangles(); | ||
| 335 | if (g_debug_context) { | ||
| 336 | g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); | ||
| 140 | } | 337 | } |
| 141 | } | 338 | } |
| 142 | 339 | ||
| @@ -182,106 +379,19 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 182 | 379 | ||
| 183 | case PICA_REG_INDEX(pipeline.vs_default_attributes_setup.index): | 380 | case PICA_REG_INDEX(pipeline.vs_default_attributes_setup.index): |
| 184 | g_state.immediate.current_attribute = 0; | 381 | g_state.immediate.current_attribute = 0; |
| 382 | g_state.immediate.reset_geometry_pipeline = true; | ||
| 185 | default_attr_counter = 0; | 383 | default_attr_counter = 0; |
| 186 | break; | 384 | break; |
| 187 | 385 | ||
| 188 | // Load default vertex input attributes | 386 | // Load default vertex input attributes |
| 189 | case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[0], 0x233): | 387 | case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[0], 0x233): |
| 190 | case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[1], 0x234): | 388 | case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[1], 0x234): |
| 191 | case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[2], 0x235): { | 389 | case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[2], 0x235): |
| 192 | // TODO: Does actual hardware indeed keep an intermediate buffer or does | 390 | LoadDefaultVertexAttributes(value); |
| 193 | // it directly write the values? | ||
| 194 | default_attr_write_buffer[default_attr_counter++] = value; | ||
| 195 | |||
| 196 | // Default attributes are written in a packed format such that four float24 values are | ||
| 197 | // encoded in | ||
| 198 | // three 32-bit numbers. We write to internal memory once a full such vector is | ||
| 199 | // written. | ||
| 200 | if (default_attr_counter >= 3) { | ||
| 201 | default_attr_counter = 0; | ||
| 202 | |||
| 203 | auto& setup = regs.pipeline.vs_default_attributes_setup; | ||
| 204 | |||
| 205 | if (setup.index >= 16) { | ||
| 206 | LOG_ERROR(HW_GPU, "Invalid VS default attribute index %d", (int)setup.index); | ||
| 207 | break; | ||
| 208 | } | ||
| 209 | |||
| 210 | Math::Vec4<float24> attribute; | ||
| 211 | |||
| 212 | // NOTE: The destination component order indeed is "backwards" | ||
| 213 | attribute.w = float24::FromRaw(default_attr_write_buffer[0] >> 8); | ||
| 214 | attribute.z = float24::FromRaw(((default_attr_write_buffer[0] & 0xFF) << 16) | | ||
| 215 | ((default_attr_write_buffer[1] >> 16) & 0xFFFF)); | ||
| 216 | attribute.y = float24::FromRaw(((default_attr_write_buffer[1] & 0xFFFF) << 8) | | ||
| 217 | ((default_attr_write_buffer[2] >> 24) & 0xFF)); | ||
| 218 | attribute.x = float24::FromRaw(default_attr_write_buffer[2] & 0xFFFFFF); | ||
| 219 | |||
| 220 | LOG_TRACE(HW_GPU, "Set default VS attribute %x to (%f %f %f %f)", (int)setup.index, | ||
| 221 | attribute.x.ToFloat32(), attribute.y.ToFloat32(), attribute.z.ToFloat32(), | ||
| 222 | attribute.w.ToFloat32()); | ||
| 223 | |||
| 224 | // TODO: Verify that this actually modifies the register! | ||
| 225 | if (setup.index < 15) { | ||
| 226 | g_state.input_default_attributes.attr[setup.index] = attribute; | ||
| 227 | setup.index++; | ||
| 228 | } else { | ||
| 229 | // Put each attribute into an immediate input buffer. When all specified immediate | ||
| 230 | // attributes are present, the Vertex Shader is invoked and everything is sent to | ||
| 231 | // the primitive assembler. | ||
| 232 | |||
| 233 | auto& immediate_input = g_state.immediate.input_vertex; | ||
| 234 | auto& immediate_attribute_id = g_state.immediate.current_attribute; | ||
| 235 | |||
| 236 | immediate_input.attr[immediate_attribute_id] = attribute; | ||
| 237 | |||
| 238 | if (immediate_attribute_id < regs.pipeline.max_input_attrib_index) { | ||
| 239 | immediate_attribute_id += 1; | ||
| 240 | } else { | ||
| 241 | MICROPROFILE_SCOPE(GPU_Drawing); | ||
| 242 | immediate_attribute_id = 0; | ||
| 243 | |||
| 244 | auto* shader_engine = Shader::GetEngine(); | ||
| 245 | shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); | ||
| 246 | |||
| 247 | // Send to vertex shader | ||
| 248 | if (g_debug_context) | ||
| 249 | g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, | ||
| 250 | static_cast<void*>(&immediate_input)); | ||
| 251 | Shader::UnitState shader_unit; | ||
| 252 | Shader::AttributeBuffer output{}; | ||
| 253 | |||
| 254 | shader_unit.LoadInput(regs.vs, immediate_input); | ||
| 255 | shader_engine->Run(g_state.vs, shader_unit); | ||
| 256 | shader_unit.WriteOutput(regs.vs, output); | ||
| 257 | |||
| 258 | // Send to renderer | ||
| 259 | using Pica::Shader::OutputVertex; | ||
| 260 | auto AddTriangle = [](const OutputVertex& v0, const OutputVertex& v1, | ||
| 261 | const OutputVertex& v2) { | ||
| 262 | VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2); | ||
| 263 | }; | ||
| 264 | |||
| 265 | g_state.primitive_assembler.SubmitVertex( | ||
| 266 | Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, output), | ||
| 267 | AddTriangle); | ||
| 268 | } | ||
| 269 | } | ||
| 270 | } | ||
| 271 | break; | 391 | break; |
| 272 | } | ||
| 273 | 392 | ||
| 274 | case PICA_REG_INDEX(pipeline.gpu_mode): | 393 | case PICA_REG_INDEX(pipeline.gpu_mode): |
| 275 | if (regs.pipeline.gpu_mode == PipelineRegs::GPUMode::Configuring) { | 394 | // This register likely just enables vertex processing and doesn't need any special handling |
| 276 | MICROPROFILE_SCOPE(GPU_Drawing); | ||
| 277 | |||
| 278 | // Draw immediate mode triangles when GPU Mode is set to GPUMode::Configuring | ||
| 279 | VideoCore::g_renderer->Rasterizer()->DrawTriangles(); | ||
| 280 | |||
| 281 | if (g_debug_context) { | ||
| 282 | g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); | ||
| 283 | } | ||
| 284 | } | ||
| 285 | break; | 395 | break; |
| 286 | 396 | ||
| 287 | case PICA_REG_INDEX_WORKAROUND(pipeline.command_buffer.trigger[0], 0x23c): | 397 | case PICA_REG_INDEX_WORKAROUND(pipeline.command_buffer.trigger[0], 0x23c): |
| @@ -297,130 +407,9 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 297 | 407 | ||
| 298 | // It seems like these trigger vertex rendering | 408 | // It seems like these trigger vertex rendering |
| 299 | case PICA_REG_INDEX(pipeline.trigger_draw): | 409 | case PICA_REG_INDEX(pipeline.trigger_draw): |
| 300 | case PICA_REG_INDEX(pipeline.trigger_draw_indexed): { | 410 | case PICA_REG_INDEX(pipeline.trigger_draw_indexed): |
| 301 | MICROPROFILE_SCOPE(GPU_Drawing); | 411 | Draw(id); |
| 302 | |||
| 303 | #if PICA_LOG_TEV | ||
| 304 | DebugUtils::DumpTevStageConfig(regs.GetTevStages()); | ||
| 305 | #endif | ||
| 306 | if (g_debug_context) | ||
| 307 | g_debug_context->OnEvent(DebugContext::Event::IncomingPrimitiveBatch, nullptr); | ||
| 308 | |||
| 309 | // Processes information about internal vertex attributes to figure out how a vertex is | ||
| 310 | // loaded. | ||
| 311 | // Later, these can be compiled and cached. | ||
| 312 | const u32 base_address = regs.pipeline.vertex_attributes.GetPhysicalBaseAddress(); | ||
| 313 | VertexLoader loader(regs.pipeline); | ||
| 314 | |||
| 315 | // Load vertices | ||
| 316 | bool is_indexed = (id == PICA_REG_INDEX(pipeline.trigger_draw_indexed)); | ||
| 317 | |||
| 318 | const auto& index_info = regs.pipeline.index_array; | ||
| 319 | const u8* index_address_8 = Memory::GetPhysicalPointer(base_address + index_info.offset); | ||
| 320 | const u16* index_address_16 = reinterpret_cast<const u16*>(index_address_8); | ||
| 321 | bool index_u16 = index_info.format != 0; | ||
| 322 | |||
| 323 | PrimitiveAssembler<Shader::OutputVertex>& primitive_assembler = g_state.primitive_assembler; | ||
| 324 | |||
| 325 | if (g_debug_context && g_debug_context->recorder) { | ||
| 326 | for (int i = 0; i < 3; ++i) { | ||
| 327 | const auto texture = regs.texturing.GetTextures()[i]; | ||
| 328 | if (!texture.enabled) | ||
| 329 | continue; | ||
| 330 | |||
| 331 | u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress()); | ||
| 332 | g_debug_context->recorder->MemoryAccessed( | ||
| 333 | texture_data, Pica::TexturingRegs::NibblesPerPixel(texture.format) * | ||
| 334 | texture.config.width / 2 * texture.config.height, | ||
| 335 | texture.config.GetPhysicalAddress()); | ||
| 336 | } | ||
| 337 | } | ||
| 338 | |||
| 339 | DebugUtils::MemoryAccessTracker memory_accesses; | ||
| 340 | |||
| 341 | // Simple circular-replacement vertex cache | ||
| 342 | // The size has been tuned for optimal balance between hit-rate and the cost of lookup | ||
| 343 | const size_t VERTEX_CACHE_SIZE = 32; | ||
| 344 | std::array<u16, VERTEX_CACHE_SIZE> vertex_cache_ids; | ||
| 345 | std::array<Shader::OutputVertex, VERTEX_CACHE_SIZE> vertex_cache; | ||
| 346 | Shader::OutputVertex output_vertex; | ||
| 347 | |||
| 348 | unsigned int vertex_cache_pos = 0; | ||
| 349 | vertex_cache_ids.fill(-1); | ||
| 350 | |||
| 351 | auto* shader_engine = Shader::GetEngine(); | ||
| 352 | Shader::UnitState shader_unit; | ||
| 353 | |||
| 354 | shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); | ||
| 355 | |||
| 356 | for (unsigned int index = 0; index < regs.pipeline.num_vertices; ++index) { | ||
| 357 | // Indexed rendering doesn't use the start offset | ||
| 358 | unsigned int vertex = | ||
| 359 | is_indexed ? (index_u16 ? index_address_16[index] : index_address_8[index]) | ||
| 360 | : (index + regs.pipeline.vertex_offset); | ||
| 361 | |||
| 362 | // -1 is a common special value used for primitive restart. Since it's unknown if | ||
| 363 | // the PICA supports it, and it would mess up the caching, guard against it here. | ||
| 364 | ASSERT(vertex != -1); | ||
| 365 | |||
| 366 | bool vertex_cache_hit = false; | ||
| 367 | |||
| 368 | if (is_indexed) { | ||
| 369 | if (g_debug_context && Pica::g_debug_context->recorder) { | ||
| 370 | int size = index_u16 ? 2 : 1; | ||
| 371 | memory_accesses.AddAccess(base_address + index_info.offset + size * index, | ||
| 372 | size); | ||
| 373 | } | ||
| 374 | |||
| 375 | for (unsigned int i = 0; i < VERTEX_CACHE_SIZE; ++i) { | ||
| 376 | if (vertex == vertex_cache_ids[i]) { | ||
| 377 | output_vertex = vertex_cache[i]; | ||
| 378 | vertex_cache_hit = true; | ||
| 379 | break; | ||
| 380 | } | ||
| 381 | } | ||
| 382 | } | ||
| 383 | |||
| 384 | if (!vertex_cache_hit) { | ||
| 385 | // Initialize data for the current vertex | ||
| 386 | Shader::AttributeBuffer input, output{}; | ||
| 387 | loader.LoadVertex(base_address, index, vertex, input, memory_accesses); | ||
| 388 | |||
| 389 | // Send to vertex shader | ||
| 390 | if (g_debug_context) | ||
| 391 | g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, | ||
| 392 | (void*)&input); | ||
| 393 | shader_unit.LoadInput(regs.vs, input); | ||
| 394 | shader_engine->Run(g_state.vs, shader_unit); | ||
| 395 | shader_unit.WriteOutput(regs.vs, output); | ||
| 396 | |||
| 397 | // Retrieve vertex from register data | ||
| 398 | output_vertex = Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, output); | ||
| 399 | |||
| 400 | if (is_indexed) { | ||
| 401 | vertex_cache[vertex_cache_pos] = output_vertex; | ||
| 402 | vertex_cache_ids[vertex_cache_pos] = vertex; | ||
| 403 | vertex_cache_pos = (vertex_cache_pos + 1) % VERTEX_CACHE_SIZE; | ||
| 404 | } | ||
| 405 | } | ||
| 406 | |||
| 407 | // Send to renderer | ||
| 408 | using Pica::Shader::OutputVertex; | ||
| 409 | auto AddTriangle = [](const OutputVertex& v0, const OutputVertex& v1, | ||
| 410 | const OutputVertex& v2) { | ||
| 411 | VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2); | ||
| 412 | }; | ||
| 413 | |||
| 414 | primitive_assembler.SubmitVertex(output_vertex, AddTriangle); | ||
| 415 | } | ||
| 416 | |||
| 417 | for (auto& range : memory_accesses.ranges) { | ||
| 418 | g_debug_context->recorder->MemoryAccessed(Memory::GetPhysicalPointer(range.first), | ||
| 419 | range.second, range.first); | ||
| 420 | } | ||
| 421 | |||
| 422 | break; | 412 | break; |
| 423 | } | ||
| 424 | 413 | ||
| 425 | case PICA_REG_INDEX(gs.bool_uniforms): | 414 | case PICA_REG_INDEX(gs.bool_uniforms): |
| 426 | WriteUniformBoolReg(g_state.gs, g_state.regs.gs.bool_uniforms.Value()); | 415 | WriteUniformBoolReg(g_state.gs, g_state.regs.gs.bool_uniforms.Value()); |
| @@ -458,7 +447,13 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 458 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[5], 0x2a1): | 447 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[5], 0x2a1): |
| 459 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[6], 0x2a2): | 448 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[6], 0x2a2): |
| 460 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[7], 0x2a3): { | 449 | case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[7], 0x2a3): { |
| 461 | WriteProgramCode(g_state.regs.gs, g_state.gs, 4096, value); | 450 | u32& offset = g_state.regs.gs.program.offset; |
| 451 | if (offset >= 4096) { | ||
| 452 | LOG_ERROR(HW_GPU, "Invalid GS program offset %u", offset); | ||
| 453 | } else { | ||
| 454 | g_state.gs.program_code[offset] = value; | ||
| 455 | offset++; | ||
| 456 | } | ||
| 462 | break; | 457 | break; |
| 463 | } | 458 | } |
| 464 | 459 | ||
| @@ -470,11 +465,18 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 470 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[5], 0x2ab): | 465 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[5], 0x2ab): |
| 471 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[6], 0x2ac): | 466 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[6], 0x2ac): |
| 472 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[7], 0x2ad): { | 467 | case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[7], 0x2ad): { |
| 473 | WriteSwizzlePatterns(g_state.regs.gs, g_state.gs, value); | 468 | u32& offset = g_state.regs.gs.swizzle_patterns.offset; |
| 469 | if (offset >= g_state.gs.swizzle_data.size()) { | ||
| 470 | LOG_ERROR(HW_GPU, "Invalid GS swizzle pattern offset %u", offset); | ||
| 471 | } else { | ||
| 472 | g_state.gs.swizzle_data[offset] = value; | ||
| 473 | offset++; | ||
| 474 | } | ||
| 474 | break; | 475 | break; |
| 475 | } | 476 | } |
| 476 | 477 | ||
| 477 | case PICA_REG_INDEX(vs.bool_uniforms): | 478 | case PICA_REG_INDEX(vs.bool_uniforms): |
| 479 | // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this? | ||
| 478 | WriteUniformBoolReg(g_state.vs, g_state.regs.vs.bool_uniforms.Value()); | 480 | WriteUniformBoolReg(g_state.vs, g_state.regs.vs.bool_uniforms.Value()); |
| 479 | break; | 481 | break; |
| 480 | 482 | ||
| @@ -482,6 +484,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 482 | case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[1], 0x2b2): | 484 | case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[1], 0x2b2): |
| 483 | case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[2], 0x2b3): | 485 | case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[2], 0x2b3): |
| 484 | case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[3], 0x2b4): { | 486 | case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[3], 0x2b4): { |
| 487 | // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this? | ||
| 485 | unsigned index = (id - PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[0], 0x2b1)); | 488 | unsigned index = (id - PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[0], 0x2b1)); |
| 486 | auto values = regs.vs.int_uniforms[index]; | 489 | auto values = regs.vs.int_uniforms[index]; |
| 487 | WriteUniformIntReg(g_state.vs, index, | 490 | WriteUniformIntReg(g_state.vs, index, |
| @@ -497,6 +500,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 497 | case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[5], 0x2c6): | 500 | case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[5], 0x2c6): |
| 498 | case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[6], 0x2c7): | 501 | case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[6], 0x2c7): |
| 499 | case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[7], 0x2c8): { | 502 | case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[7], 0x2c8): { |
| 503 | // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this? | ||
| 500 | WriteUniformFloatReg(g_state.regs.vs, g_state.vs, vs_float_regs_counter, | 504 | WriteUniformFloatReg(g_state.regs.vs, g_state.vs, vs_float_regs_counter, |
| 501 | vs_uniform_write_buffer, value); | 505 | vs_uniform_write_buffer, value); |
| 502 | break; | 506 | break; |
| @@ -510,7 +514,16 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 510 | case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[5], 0x2d1): | 514 | case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[5], 0x2d1): |
| 511 | case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[6], 0x2d2): | 515 | case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[6], 0x2d2): |
| 512 | case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[7], 0x2d3): { | 516 | case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[7], 0x2d3): { |
| 513 | WriteProgramCode(g_state.regs.vs, g_state.vs, 512, value); | 517 | u32& offset = g_state.regs.vs.program.offset; |
| 518 | if (offset >= 512) { | ||
| 519 | LOG_ERROR(HW_GPU, "Invalid VS program offset %u", offset); | ||
| 520 | } else { | ||
| 521 | g_state.vs.program_code[offset] = value; | ||
| 522 | if (!g_state.regs.pipeline.gs_unit_exclusive_configuration) { | ||
| 523 | g_state.gs.program_code[offset] = value; | ||
| 524 | } | ||
| 525 | offset++; | ||
| 526 | } | ||
| 514 | break; | 527 | break; |
| 515 | } | 528 | } |
| 516 | 529 | ||
| @@ -522,7 +535,16 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | |||
| 522 | case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[5], 0x2db): | 535 | case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[5], 0x2db): |
| 523 | case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[6], 0x2dc): | 536 | case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[6], 0x2dc): |
| 524 | case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[7], 0x2dd): { | 537 | case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[7], 0x2dd): { |
| 525 | WriteSwizzlePatterns(g_state.regs.vs, g_state.vs, value); | 538 | u32& offset = g_state.regs.vs.swizzle_patterns.offset; |
| 539 | if (offset >= g_state.vs.swizzle_data.size()) { | ||
| 540 | LOG_ERROR(HW_GPU, "Invalid VS swizzle pattern offset %u", offset); | ||
| 541 | } else { | ||
| 542 | g_state.vs.swizzle_data[offset] = value; | ||
| 543 | if (!g_state.regs.pipeline.gs_unit_exclusive_configuration) { | ||
| 544 | g_state.gs.swizzle_data[offset] = value; | ||
| 545 | } | ||
| 546 | offset++; | ||
| 547 | } | ||
| 526 | break; | 548 | break; |
| 527 | } | 549 | } |
| 528 | 550 | ||
| @@ -620,6 +642,6 @@ void ProcessCommandList(const u32* list, u32 size) { | |||
| 620 | } | 642 | } |
| 621 | } | 643 | } |
| 622 | 644 | ||
| 623 | } // namespace | 645 | } // namespace CommandProcessor |
| 624 | 646 | ||
| 625 | } // namespace | 647 | } // namespace Pica |
diff --git a/src/video_core/geometry_pipeline.cpp b/src/video_core/geometry_pipeline.cpp new file mode 100644 index 000000000..98ff2ccd3 --- /dev/null +++ b/src/video_core/geometry_pipeline.cpp | |||
| @@ -0,0 +1,274 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "video_core/geometry_pipeline.h" | ||
| 6 | #include "video_core/pica_state.h" | ||
| 7 | #include "video_core/regs.h" | ||
| 8 | #include "video_core/renderer_base.h" | ||
| 9 | #include "video_core/video_core.h" | ||
| 10 | |||
| 11 | namespace Pica { | ||
| 12 | |||
| 13 | /// An attribute buffering interface for different pipeline modes | ||
| 14 | class GeometryPipelineBackend { | ||
| 15 | public: | ||
| 16 | virtual ~GeometryPipelineBackend() = default; | ||
| 17 | |||
| 18 | /// Checks if there is no incomplete data transfer | ||
| 19 | virtual bool IsEmpty() const = 0; | ||
| 20 | |||
| 21 | /// Checks if the pipeline needs a direct input from index buffer | ||
| 22 | virtual bool NeedIndexInput() const = 0; | ||
| 23 | |||
| 24 | /// Submits an index from index buffer | ||
| 25 | virtual void SubmitIndex(unsigned int val) = 0; | ||
| 26 | |||
| 27 | /** | ||
| 28 | * Submits vertex attributes | ||
| 29 | * @param input attributes of a vertex output from vertex shader | ||
| 30 | * @return if the buffer is full and the geometry shader should be invoked | ||
| 31 | */ | ||
| 32 | virtual bool SubmitVertex(const Shader::AttributeBuffer& input) = 0; | ||
| 33 | }; | ||
| 34 | |||
| 35 | // In the Point mode, vertex attributes are sent to the input registers in the geometry shader unit. | ||
| 36 | // The size of vertex shader outputs and geometry shader inputs are constants. Geometry shader is | ||
| 37 | // invoked upon inputs buffer filled up by vertex shader outputs. For example, if we have a geometry | ||
| 38 | // shader that takes 6 inputs, and the vertex shader outputs 2 attributes, it would take 3 vertices | ||
| 39 | // for one geometry shader invocation. | ||
| 40 | // TODO: what happens when the input size is not divisible by the output size? | ||
| 41 | class GeometryPipeline_Point : public GeometryPipelineBackend { | ||
| 42 | public: | ||
| 43 | GeometryPipeline_Point(const Regs& regs, Shader::GSUnitState& unit) : regs(regs), unit(unit) { | ||
| 44 | ASSERT(regs.pipeline.variable_primitive == 0); | ||
| 45 | ASSERT(regs.gs.input_to_uniform == 0); | ||
| 46 | vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1; | ||
| 47 | size_t gs_input_num = regs.gs.max_input_attribute_index + 1; | ||
| 48 | ASSERT(gs_input_num % vs_output_num == 0); | ||
| 49 | buffer_cur = attribute_buffer.attr; | ||
| 50 | buffer_end = attribute_buffer.attr + gs_input_num; | ||
| 51 | } | ||
| 52 | |||
| 53 | bool IsEmpty() const override { | ||
| 54 | return buffer_cur == attribute_buffer.attr; | ||
| 55 | } | ||
| 56 | |||
| 57 | bool NeedIndexInput() const override { | ||
| 58 | return false; | ||
| 59 | } | ||
| 60 | |||
| 61 | void SubmitIndex(unsigned int val) override { | ||
| 62 | UNREACHABLE(); | ||
| 63 | } | ||
| 64 | |||
| 65 | bool SubmitVertex(const Shader::AttributeBuffer& input) override { | ||
| 66 | buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur); | ||
| 67 | if (buffer_cur == buffer_end) { | ||
| 68 | buffer_cur = attribute_buffer.attr; | ||
| 69 | unit.LoadInput(regs.gs, attribute_buffer); | ||
| 70 | return true; | ||
| 71 | } | ||
| 72 | return false; | ||
| 73 | } | ||
| 74 | |||
| 75 | private: | ||
| 76 | const Regs& regs; | ||
| 77 | Shader::GSUnitState& unit; | ||
| 78 | Shader::AttributeBuffer attribute_buffer; | ||
| 79 | Math::Vec4<float24>* buffer_cur; | ||
| 80 | Math::Vec4<float24>* buffer_end; | ||
| 81 | unsigned int vs_output_num; | ||
| 82 | }; | ||
| 83 | |||
| 84 | // In VariablePrimitive mode, vertex attributes are buffered into the uniform registers in the | ||
| 85 | // geometry shader unit. The number of vertex is variable, which is specified by the first index | ||
| 86 | // value in the batch. This mode is usually used for subdivision. | ||
| 87 | class GeometryPipeline_VariablePrimitive : public GeometryPipelineBackend { | ||
| 88 | public: | ||
| 89 | GeometryPipeline_VariablePrimitive(const Regs& regs, Shader::ShaderSetup& setup) | ||
| 90 | : regs(regs), setup(setup) { | ||
| 91 | ASSERT(regs.pipeline.variable_primitive == 1); | ||
| 92 | ASSERT(regs.gs.input_to_uniform == 1); | ||
| 93 | vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1; | ||
| 94 | } | ||
| 95 | |||
| 96 | bool IsEmpty() const override { | ||
| 97 | return need_index; | ||
| 98 | } | ||
| 99 | |||
| 100 | bool NeedIndexInput() const override { | ||
| 101 | return need_index; | ||
| 102 | } | ||
| 103 | |||
| 104 | void SubmitIndex(unsigned int val) override { | ||
| 105 | DEBUG_ASSERT(need_index); | ||
| 106 | |||
| 107 | // The number of vertex input is put to the uniform register | ||
| 108 | float24 vertex_num = float24::FromFloat32(static_cast<float>(val)); | ||
| 109 | setup.uniforms.f[0] = Math::MakeVec(vertex_num, vertex_num, vertex_num, vertex_num); | ||
| 110 | |||
| 111 | // The second uniform register and so on are used for receiving input vertices | ||
| 112 | buffer_cur = setup.uniforms.f + 1; | ||
| 113 | |||
| 114 | main_vertex_num = regs.pipeline.variable_vertex_main_num_minus_1 + 1; | ||
| 115 | total_vertex_num = val; | ||
| 116 | need_index = false; | ||
| 117 | } | ||
| 118 | |||
| 119 | bool SubmitVertex(const Shader::AttributeBuffer& input) override { | ||
| 120 | DEBUG_ASSERT(!need_index); | ||
| 121 | if (main_vertex_num != 0) { | ||
| 122 | // For main vertices, receive all attributes | ||
| 123 | buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur); | ||
| 124 | --main_vertex_num; | ||
| 125 | } else { | ||
| 126 | // For other vertices, only receive the first attribute (usually the position) | ||
| 127 | *(buffer_cur++) = input.attr[0]; | ||
| 128 | } | ||
| 129 | --total_vertex_num; | ||
| 130 | |||
| 131 | if (total_vertex_num == 0) { | ||
| 132 | need_index = true; | ||
| 133 | return true; | ||
| 134 | } | ||
| 135 | |||
| 136 | return false; | ||
| 137 | } | ||
| 138 | |||
| 139 | private: | ||
| 140 | bool need_index = true; | ||
| 141 | const Regs& regs; | ||
| 142 | Shader::ShaderSetup& setup; | ||
| 143 | unsigned int main_vertex_num; | ||
| 144 | unsigned int total_vertex_num; | ||
| 145 | Math::Vec4<float24>* buffer_cur; | ||
| 146 | unsigned int vs_output_num; | ||
| 147 | }; | ||
| 148 | |||
| 149 | // In FixedPrimitive mode, vertex attributes are buffered into the uniform registers in the geometry | ||
| 150 | // shader unit. The number of vertex per shader invocation is constant. This is usually used for | ||
| 151 | // particle system. | ||
| 152 | class GeometryPipeline_FixedPrimitive : public GeometryPipelineBackend { | ||
| 153 | public: | ||
| 154 | GeometryPipeline_FixedPrimitive(const Regs& regs, Shader::ShaderSetup& setup) | ||
| 155 | : regs(regs), setup(setup) { | ||
| 156 | ASSERT(regs.pipeline.variable_primitive == 0); | ||
| 157 | ASSERT(regs.gs.input_to_uniform == 1); | ||
| 158 | vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1; | ||
| 159 | ASSERT(vs_output_num == regs.pipeline.gs_config.stride_minus_1 + 1); | ||
| 160 | size_t vertex_num = regs.pipeline.gs_config.fixed_vertex_num_minus_1 + 1; | ||
| 161 | buffer_cur = buffer_begin = setup.uniforms.f + regs.pipeline.gs_config.start_index; | ||
| 162 | buffer_end = buffer_begin + vs_output_num * vertex_num; | ||
| 163 | } | ||
| 164 | |||
| 165 | bool IsEmpty() const override { | ||
| 166 | return buffer_cur == buffer_begin; | ||
| 167 | } | ||
| 168 | |||
| 169 | bool NeedIndexInput() const override { | ||
| 170 | return false; | ||
| 171 | } | ||
| 172 | |||
| 173 | void SubmitIndex(unsigned int val) override { | ||
| 174 | UNREACHABLE(); | ||
| 175 | } | ||
| 176 | |||
| 177 | bool SubmitVertex(const Shader::AttributeBuffer& input) override { | ||
| 178 | buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur); | ||
| 179 | if (buffer_cur == buffer_end) { | ||
| 180 | buffer_cur = buffer_begin; | ||
| 181 | return true; | ||
| 182 | } | ||
| 183 | return false; | ||
| 184 | } | ||
| 185 | |||
| 186 | private: | ||
| 187 | const Regs& regs; | ||
| 188 | Shader::ShaderSetup& setup; | ||
| 189 | Math::Vec4<float24>* buffer_begin; | ||
| 190 | Math::Vec4<float24>* buffer_cur; | ||
| 191 | Math::Vec4<float24>* buffer_end; | ||
| 192 | unsigned int vs_output_num; | ||
| 193 | }; | ||
| 194 | |||
| 195 | GeometryPipeline::GeometryPipeline(State& state) : state(state) {} | ||
| 196 | |||
| 197 | GeometryPipeline::~GeometryPipeline() = default; | ||
| 198 | |||
| 199 | void GeometryPipeline::SetVertexHandler(Shader::VertexHandler vertex_handler) { | ||
| 200 | this->vertex_handler = vertex_handler; | ||
| 201 | } | ||
| 202 | |||
| 203 | void GeometryPipeline::Setup(Shader::ShaderEngine* shader_engine) { | ||
| 204 | if (!backend) | ||
| 205 | return; | ||
| 206 | |||
| 207 | this->shader_engine = shader_engine; | ||
| 208 | shader_engine->SetupBatch(state.gs, state.regs.gs.main_offset); | ||
| 209 | } | ||
| 210 | |||
| 211 | void GeometryPipeline::Reconfigure() { | ||
| 212 | ASSERT(!backend || backend->IsEmpty()); | ||
| 213 | |||
| 214 | if (state.regs.pipeline.use_gs == PipelineRegs::UseGS::No) { | ||
| 215 | backend = nullptr; | ||
| 216 | return; | ||
| 217 | } | ||
| 218 | |||
| 219 | ASSERT(state.regs.pipeline.use_gs == PipelineRegs::UseGS::Yes); | ||
| 220 | |||
| 221 | // The following assumes that when geometry shader is in use, the shader unit 3 is configured as | ||
| 222 | // a geometry shader unit. | ||
| 223 | // TODO: what happens if this is not true? | ||
| 224 | ASSERT(state.regs.pipeline.gs_unit_exclusive_configuration == 1); | ||
| 225 | ASSERT(state.regs.gs.shader_mode == ShaderRegs::ShaderMode::GS); | ||
| 226 | |||
| 227 | state.gs_unit.ConfigOutput(state.regs.gs); | ||
| 228 | |||
| 229 | ASSERT(state.regs.pipeline.vs_outmap_total_minus_1_a == | ||
| 230 | state.regs.pipeline.vs_outmap_total_minus_1_b); | ||
| 231 | |||
| 232 | switch (state.regs.pipeline.gs_config.mode) { | ||
| 233 | case PipelineRegs::GSMode::Point: | ||
| 234 | backend = std::make_unique<GeometryPipeline_Point>(state.regs, state.gs_unit); | ||
| 235 | break; | ||
| 236 | case PipelineRegs::GSMode::VariablePrimitive: | ||
| 237 | backend = std::make_unique<GeometryPipeline_VariablePrimitive>(state.regs, state.gs); | ||
| 238 | break; | ||
| 239 | case PipelineRegs::GSMode::FixedPrimitive: | ||
| 240 | backend = std::make_unique<GeometryPipeline_FixedPrimitive>(state.regs, state.gs); | ||
| 241 | break; | ||
| 242 | default: | ||
| 243 | UNREACHABLE(); | ||
| 244 | } | ||
| 245 | } | ||
| 246 | |||
| 247 | bool GeometryPipeline::NeedIndexInput() const { | ||
| 248 | if (!backend) | ||
| 249 | return false; | ||
| 250 | return backend->NeedIndexInput(); | ||
| 251 | } | ||
| 252 | |||
| 253 | void GeometryPipeline::SubmitIndex(unsigned int val) { | ||
| 254 | backend->SubmitIndex(val); | ||
| 255 | } | ||
| 256 | |||
| 257 | void GeometryPipeline::SubmitVertex(const Shader::AttributeBuffer& input) { | ||
| 258 | if (!backend) { | ||
| 259 | // No backend means the geometry shader is disabled, so we send the vertex shader output | ||
| 260 | // directly to the primitive assembler. | ||
| 261 | vertex_handler(input); | ||
| 262 | } else { | ||
| 263 | if (backend->SubmitVertex(input)) { | ||
| 264 | shader_engine->Run(state.gs, state.gs_unit); | ||
| 265 | |||
| 266 | // The uniform b15 is set to true after every geometry shader invocation. This is useful | ||
| 267 | // for the shader to know if this is the first invocation in a batch, if the program set | ||
| 268 | // b15 to false first. | ||
| 269 | state.gs.uniforms.b[15] = true; | ||
| 270 | } | ||
| 271 | } | ||
| 272 | } | ||
| 273 | |||
| 274 | } // namespace Pica | ||
diff --git a/src/video_core/geometry_pipeline.h b/src/video_core/geometry_pipeline.h new file mode 100644 index 000000000..91fdd3192 --- /dev/null +++ b/src/video_core/geometry_pipeline.h | |||
| @@ -0,0 +1,49 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <memory> | ||
| 8 | #include "video_core/shader/shader.h" | ||
| 9 | |||
| 10 | namespace Pica { | ||
| 11 | |||
| 12 | struct State; | ||
| 13 | |||
| 14 | class GeometryPipelineBackend; | ||
| 15 | |||
| 16 | /// A pipeline receiving from vertex shader and sending to geometry shader and primitive assembler | ||
| 17 | class GeometryPipeline { | ||
| 18 | public: | ||
| 19 | explicit GeometryPipeline(State& state); | ||
| 20 | ~GeometryPipeline(); | ||
| 21 | |||
| 22 | /// Sets the handler for receiving vertex outputs from vertex shader | ||
| 23 | void SetVertexHandler(Shader::VertexHandler vertex_handler); | ||
| 24 | |||
| 25 | /** | ||
| 26 | * Setup the geometry shader unit if it is in use | ||
| 27 | * @param shader_engine the shader engine for the geometry shader to run | ||
| 28 | */ | ||
| 29 | void Setup(Shader::ShaderEngine* shader_engine); | ||
| 30 | |||
| 31 | /// Reconfigures the pipeline according to current register settings | ||
| 32 | void Reconfigure(); | ||
| 33 | |||
| 34 | /// Checks if the pipeline needs a direct input from index buffer | ||
| 35 | bool NeedIndexInput() const; | ||
| 36 | |||
| 37 | /// Submits an index from index buffer. Call this only when NeedIndexInput returns true | ||
| 38 | void SubmitIndex(unsigned int val); | ||
| 39 | |||
| 40 | /// Submits vertex attributes output from vertex shader | ||
| 41 | void SubmitVertex(const Shader::AttributeBuffer& input); | ||
| 42 | |||
| 43 | private: | ||
| 44 | Shader::VertexHandler vertex_handler; | ||
| 45 | Shader::ShaderEngine* shader_engine; | ||
| 46 | std::unique_ptr<GeometryPipelineBackend> backend; | ||
| 47 | State& state; | ||
| 48 | }; | ||
| 49 | } // namespace Pica | ||
diff --git a/src/video_core/pica.cpp b/src/video_core/pica.cpp index b95148a6a..218e06883 100644 --- a/src/video_core/pica.cpp +++ b/src/video_core/pica.cpp | |||
| @@ -3,9 +3,11 @@ | |||
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include <cstring> | 5 | #include <cstring> |
| 6 | #include "video_core/geometry_pipeline.h" | ||
| 6 | #include "video_core/pica.h" | 7 | #include "video_core/pica.h" |
| 7 | #include "video_core/pica_state.h" | 8 | #include "video_core/pica_state.h" |
| 8 | #include "video_core/regs_pipeline.h" | 9 | #include "video_core/renderer_base.h" |
| 10 | #include "video_core/video_core.h" | ||
| 9 | 11 | ||
| 10 | namespace Pica { | 12 | namespace Pica { |
| 11 | 13 | ||
| @@ -24,6 +26,23 @@ void Zero(T& o) { | |||
| 24 | memset(&o, 0, sizeof(o)); | 26 | memset(&o, 0, sizeof(o)); |
| 25 | } | 27 | } |
| 26 | 28 | ||
| 29 | State::State() : geometry_pipeline(*this) { | ||
| 30 | auto SubmitVertex = [this](const Shader::AttributeBuffer& vertex) { | ||
| 31 | using Pica::Shader::OutputVertex; | ||
| 32 | auto AddTriangle = [this](const OutputVertex& v0, const OutputVertex& v1, | ||
| 33 | const OutputVertex& v2) { | ||
| 34 | VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2); | ||
| 35 | }; | ||
| 36 | primitive_assembler.SubmitVertex( | ||
| 37 | Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, vertex), AddTriangle); | ||
| 38 | }; | ||
| 39 | |||
| 40 | auto SetWinding = [this]() { primitive_assembler.SetWinding(); }; | ||
| 41 | |||
| 42 | g_state.gs_unit.SetVertexHandler(SubmitVertex, SetWinding); | ||
| 43 | g_state.geometry_pipeline.SetVertexHandler(SubmitVertex); | ||
| 44 | } | ||
| 45 | |||
| 27 | void State::Reset() { | 46 | void State::Reset() { |
| 28 | Zero(regs); | 47 | Zero(regs); |
| 29 | Zero(vs); | 48 | Zero(vs); |
diff --git a/src/video_core/pica_state.h b/src/video_core/pica_state.h index 2d23d34e6..c6634a0bc 100644 --- a/src/video_core/pica_state.h +++ b/src/video_core/pica_state.h | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include "common/bit_field.h" | 8 | #include "common/bit_field.h" |
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "common/vector_math.h" | 10 | #include "common/vector_math.h" |
| 11 | #include "video_core/geometry_pipeline.h" | ||
| 11 | #include "video_core/primitive_assembly.h" | 12 | #include "video_core/primitive_assembly.h" |
| 12 | #include "video_core/regs.h" | 13 | #include "video_core/regs.h" |
| 13 | #include "video_core/shader/shader.h" | 14 | #include "video_core/shader/shader.h" |
| @@ -16,6 +17,7 @@ namespace Pica { | |||
| 16 | 17 | ||
| 17 | /// Struct used to describe current Pica state | 18 | /// Struct used to describe current Pica state |
| 18 | struct State { | 19 | struct State { |
| 20 | State(); | ||
| 19 | void Reset(); | 21 | void Reset(); |
| 20 | 22 | ||
| 21 | /// Pica registers | 23 | /// Pica registers |
| @@ -79,7 +81,7 @@ struct State { | |||
| 79 | std::array<ColorDifferenceEntry, 256> color_diff_table; | 81 | std::array<ColorDifferenceEntry, 256> color_diff_table; |
| 80 | } proctex; | 82 | } proctex; |
| 81 | 83 | ||
| 82 | struct { | 84 | struct Lighting { |
| 83 | union LutEntry { | 85 | union LutEntry { |
| 84 | // Used for raw access | 86 | // Used for raw access |
| 85 | u32 raw; | 87 | u32 raw; |
| @@ -137,8 +139,17 @@ struct State { | |||
| 137 | Shader::AttributeBuffer input_vertex; | 139 | Shader::AttributeBuffer input_vertex; |
| 138 | // Index of the next attribute to be loaded into `input_vertex`. | 140 | // Index of the next attribute to be loaded into `input_vertex`. |
| 139 | u32 current_attribute = 0; | 141 | u32 current_attribute = 0; |
| 142 | // Indicates the immediate mode just started and the geometry pipeline needs to reconfigure | ||
| 143 | bool reset_geometry_pipeline = true; | ||
| 140 | } immediate; | 144 | } immediate; |
| 141 | 145 | ||
| 146 | // the geometry shader needs to be kept in the global state because some shaders relie on | ||
| 147 | // preserved register value across shader invocation. | ||
| 148 | // TODO: also bring the three vertex shader units here and implement the shader scheduler. | ||
| 149 | Shader::GSUnitState gs_unit; | ||
| 150 | |||
| 151 | GeometryPipeline geometry_pipeline; | ||
| 152 | |||
| 142 | // This is constructed with a dummy triangle topology | 153 | // This is constructed with a dummy triangle topology |
| 143 | PrimitiveAssembler<Shader::OutputVertex> primitive_assembler; | 154 | PrimitiveAssembler<Shader::OutputVertex> primitive_assembler; |
| 144 | }; | 155 | }; |
diff --git a/src/video_core/pica_types.h b/src/video_core/pica_types.h index 5d7e10066..2eafa7e9e 100644 --- a/src/video_core/pica_types.h +++ b/src/video_core/pica_types.h | |||
| @@ -58,11 +58,12 @@ public: | |||
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | Float<M, E> operator*(const Float<M, E>& flt) const { | 60 | Float<M, E> operator*(const Float<M, E>& flt) const { |
| 61 | if ((this->value == 0.f && !std::isnan(flt.value)) || | 61 | float result = value * flt.ToFloat32(); |
| 62 | (flt.value == 0.f && !std::isnan(this->value))) | 62 | // PICA gives 0 instead of NaN when multiplying by inf |
| 63 | // PICA gives 0 instead of NaN when multiplying by inf | 63 | if (!std::isnan(value) && !std::isnan(flt.ToFloat32())) |
| 64 | return Zero(); | 64 | if (std::isnan(result)) |
| 65 | return Float<M, E>::FromFloat32(ToFloat32() * flt.ToFloat32()); | 65 | result = 0.f; |
| 66 | return Float<M, E>::FromFloat32(result); | ||
| 66 | } | 67 | } |
| 67 | 68 | ||
| 68 | Float<M, E> operator/(const Float<M, E>& flt) const { | 69 | Float<M, E> operator/(const Float<M, E>& flt) const { |
| @@ -78,12 +79,7 @@ public: | |||
| 78 | } | 79 | } |
| 79 | 80 | ||
| 80 | Float<M, E>& operator*=(const Float<M, E>& flt) { | 81 | Float<M, E>& operator*=(const Float<M, E>& flt) { |
| 81 | if ((this->value == 0.f && !std::isnan(flt.value)) || | 82 | value = operator*(flt).value; |
| 82 | (flt.value == 0.f && !std::isnan(this->value))) | ||
| 83 | // PICA gives 0 instead of NaN when multiplying by inf | ||
| 84 | *this = Zero(); | ||
| 85 | else | ||
| 86 | value *= flt.ToFloat32(); | ||
| 87 | return *this; | 83 | return *this; |
| 88 | } | 84 | } |
| 89 | 85 | ||
diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp index acd2ac5e2..9c3dd4cab 100644 --- a/src/video_core/primitive_assembly.cpp +++ b/src/video_core/primitive_assembly.cpp | |||
| @@ -17,15 +17,18 @@ template <typename VertexType> | |||
| 17 | void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx, | 17 | void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx, |
| 18 | TriangleHandler triangle_handler) { | 18 | TriangleHandler triangle_handler) { |
| 19 | switch (topology) { | 19 | switch (topology) { |
| 20 | // TODO: Figure out what's different with TriangleTopology::Shader. | ||
| 21 | case PipelineRegs::TriangleTopology::List: | 20 | case PipelineRegs::TriangleTopology::List: |
| 22 | case PipelineRegs::TriangleTopology::Shader: | 21 | case PipelineRegs::TriangleTopology::Shader: |
| 23 | if (buffer_index < 2) { | 22 | if (buffer_index < 2) { |
| 24 | buffer[buffer_index++] = vtx; | 23 | buffer[buffer_index++] = vtx; |
| 25 | } else { | 24 | } else { |
| 26 | buffer_index = 0; | 25 | buffer_index = 0; |
| 27 | 26 | if (topology == PipelineRegs::TriangleTopology::Shader && winding) { | |
| 28 | triangle_handler(buffer[0], buffer[1], vtx); | 27 | triangle_handler(buffer[1], buffer[0], vtx); |
| 28 | winding = false; | ||
| 29 | } else { | ||
| 30 | triangle_handler(buffer[0], buffer[1], vtx); | ||
| 31 | } | ||
| 29 | } | 32 | } |
| 30 | break; | 33 | break; |
| 31 | 34 | ||
| @@ -51,9 +54,15 @@ void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx, | |||
| 51 | } | 54 | } |
| 52 | 55 | ||
| 53 | template <typename VertexType> | 56 | template <typename VertexType> |
| 57 | void PrimitiveAssembler<VertexType>::SetWinding() { | ||
| 58 | winding = true; | ||
| 59 | } | ||
| 60 | |||
| 61 | template <typename VertexType> | ||
| 54 | void PrimitiveAssembler<VertexType>::Reset() { | 62 | void PrimitiveAssembler<VertexType>::Reset() { |
| 55 | buffer_index = 0; | 63 | buffer_index = 0; |
| 56 | strip_ready = false; | 64 | strip_ready = false; |
| 65 | winding = false; | ||
| 57 | } | 66 | } |
| 58 | 67 | ||
| 59 | template <typename VertexType> | 68 | template <typename VertexType> |
diff --git a/src/video_core/primitive_assembly.h b/src/video_core/primitive_assembly.h index e8eccdf27..12de8e3b9 100644 --- a/src/video_core/primitive_assembly.h +++ b/src/video_core/primitive_assembly.h | |||
| @@ -30,6 +30,12 @@ struct PrimitiveAssembler { | |||
| 30 | void SubmitVertex(const VertexType& vtx, TriangleHandler triangle_handler); | 30 | void SubmitVertex(const VertexType& vtx, TriangleHandler triangle_handler); |
| 31 | 31 | ||
| 32 | /** | 32 | /** |
| 33 | * Invert the vertex order of the next triangle. Called by geometry shader emitter. | ||
| 34 | * This only takes effect for TriangleTopology::Shader. | ||
| 35 | */ | ||
| 36 | void SetWinding(); | ||
| 37 | |||
| 38 | /** | ||
| 33 | * Resets the internal state of the PrimitiveAssembler. | 39 | * Resets the internal state of the PrimitiveAssembler. |
| 34 | */ | 40 | */ |
| 35 | void Reset(); | 41 | void Reset(); |
| @@ -45,6 +51,7 @@ private: | |||
| 45 | int buffer_index; | 51 | int buffer_index; |
| 46 | VertexType buffer[2]; | 52 | VertexType buffer[2]; |
| 47 | bool strip_ready = false; | 53 | bool strip_ready = false; |
| 54 | bool winding = false; | ||
| 48 | }; | 55 | }; |
| 49 | 56 | ||
| 50 | } // namespace | 57 | } // namespace |
diff --git a/src/video_core/regs_framebuffer.h b/src/video_core/regs_framebuffer.h index a50bd4111..7b565f911 100644 --- a/src/video_core/regs_framebuffer.h +++ b/src/video_core/regs_framebuffer.h | |||
| @@ -256,10 +256,9 @@ struct FramebufferRegs { | |||
| 256 | return 3; | 256 | return 3; |
| 257 | case DepthFormat::D24S8: | 257 | case DepthFormat::D24S8: |
| 258 | return 4; | 258 | return 4; |
| 259 | default: | ||
| 260 | LOG_CRITICAL(HW_GPU, "Unknown depth format %u", format); | ||
| 261 | UNIMPLEMENTED(); | ||
| 262 | } | 259 | } |
| 260 | |||
| 261 | ASSERT_MSG(false, "Unknown depth format %u", format); | ||
| 263 | } | 262 | } |
| 264 | 263 | ||
| 265 | // Returns the number of bits per depth component of the specified depth format | 264 | // Returns the number of bits per depth component of the specified depth format |
| @@ -270,10 +269,9 @@ struct FramebufferRegs { | |||
| 270 | case DepthFormat::D24: | 269 | case DepthFormat::D24: |
| 271 | case DepthFormat::D24S8: | 270 | case DepthFormat::D24S8: |
| 272 | return 24; | 271 | return 24; |
| 273 | default: | ||
| 274 | LOG_CRITICAL(HW_GPU, "Unknown depth format %u", format); | ||
| 275 | UNIMPLEMENTED(); | ||
| 276 | } | 272 | } |
| 273 | |||
| 274 | ASSERT_MSG(false, "Unknown depth format %u", format); | ||
| 277 | } | 275 | } |
| 278 | 276 | ||
| 279 | INSERT_PADDING_WORDS(0x20); | 277 | INSERT_PADDING_WORDS(0x20); |
diff --git a/src/video_core/regs_pipeline.h b/src/video_core/regs_pipeline.h index 31c747d77..e78c3e331 100644 --- a/src/video_core/regs_pipeline.h +++ b/src/video_core/regs_pipeline.h | |||
| @@ -147,7 +147,15 @@ struct PipelineRegs { | |||
| 147 | // Number of vertices to render | 147 | // Number of vertices to render |
| 148 | u32 num_vertices; | 148 | u32 num_vertices; |
| 149 | 149 | ||
| 150 | INSERT_PADDING_WORDS(0x1); | 150 | enum class UseGS : u32 { |
| 151 | No = 0, | ||
| 152 | Yes = 2, | ||
| 153 | }; | ||
| 154 | |||
| 155 | union { | ||
| 156 | BitField<0, 2, UseGS> use_gs; | ||
| 157 | BitField<31, 1, u32> variable_primitive; | ||
| 158 | }; | ||
| 151 | 159 | ||
| 152 | // The index of the first vertex to render | 160 | // The index of the first vertex to render |
| 153 | u32 vertex_offset; | 161 | u32 vertex_offset; |
| @@ -202,7 +210,14 @@ struct PipelineRegs { | |||
| 202 | /// Number of input attributes to the vertex shader minus 1 | 210 | /// Number of input attributes to the vertex shader minus 1 |
| 203 | BitField<0, 4, u32> max_input_attrib_index; | 211 | BitField<0, 4, u32> max_input_attrib_index; |
| 204 | 212 | ||
| 205 | INSERT_PADDING_WORDS(2); | 213 | INSERT_PADDING_WORDS(1); |
| 214 | |||
| 215 | // The shader unit 3, which can be used for both vertex and geometry shader, gets its | ||
| 216 | // configuration depending on this register. If this is not set, unit 3 will share some | ||
| 217 | // configuration with other units. It is known that program code and swizzle pattern uploaded | ||
| 218 | // via regs.vs will be also uploaded to unit 3 if this is not set. Although very likely, it is | ||
| 219 | // still unclear whether uniforms and other configuration can be also shared. | ||
| 220 | BitField<0, 1, u32> gs_unit_exclusive_configuration; | ||
| 206 | 221 | ||
| 207 | enum class GPUMode : u32 { | 222 | enum class GPUMode : u32 { |
| 208 | Drawing = 0, | 223 | Drawing = 0, |
| @@ -211,7 +226,29 @@ struct PipelineRegs { | |||
| 211 | 226 | ||
| 212 | GPUMode gpu_mode; | 227 | GPUMode gpu_mode; |
| 213 | 228 | ||
| 214 | INSERT_PADDING_WORDS(0x18); | 229 | INSERT_PADDING_WORDS(0x4); |
| 230 | BitField<0, 4, u32> vs_outmap_total_minus_1_a; | ||
| 231 | INSERT_PADDING_WORDS(0x6); | ||
| 232 | BitField<0, 4, u32> vs_outmap_total_minus_1_b; | ||
| 233 | |||
| 234 | enum class GSMode : u32 { | ||
| 235 | Point = 0, | ||
| 236 | VariablePrimitive = 1, | ||
| 237 | FixedPrimitive = 2, | ||
| 238 | }; | ||
| 239 | |||
| 240 | union { | ||
| 241 | BitField<0, 8, GSMode> mode; | ||
| 242 | BitField<8, 4, u32> fixed_vertex_num_minus_1; | ||
| 243 | BitField<12, 4, u32> stride_minus_1; | ||
| 244 | BitField<16, 4, u32> start_index; | ||
| 245 | } gs_config; | ||
| 246 | |||
| 247 | INSERT_PADDING_WORDS(0x1); | ||
| 248 | |||
| 249 | u32 variable_vertex_main_num_minus_1; | ||
| 250 | |||
| 251 | INSERT_PADDING_WORDS(0x9); | ||
| 215 | 252 | ||
| 216 | enum class TriangleTopology : u32 { | 253 | enum class TriangleTopology : u32 { |
| 217 | List = 0, | 254 | List = 0, |
diff --git a/src/video_core/regs_rasterizer.h b/src/video_core/regs_rasterizer.h index 2874fd127..4fef00d76 100644 --- a/src/video_core/regs_rasterizer.h +++ b/src/video_core/regs_rasterizer.h | |||
| @@ -5,10 +5,10 @@ | |||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <array> | 7 | #include <array> |
| 8 | |||
| 9 | #include "common/bit_field.h" | 8 | #include "common/bit_field.h" |
| 10 | #include "common/common_funcs.h" | 9 | #include "common/common_funcs.h" |
| 11 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 11 | #include "video_core/pica_types.h" | ||
| 12 | 12 | ||
| 13 | namespace Pica { | 13 | namespace Pica { |
| 14 | 14 | ||
| @@ -31,7 +31,17 @@ struct RasterizerRegs { | |||
| 31 | 31 | ||
| 32 | BitField<0, 24, u32> viewport_size_y; | 32 | BitField<0, 24, u32> viewport_size_y; |
| 33 | 33 | ||
| 34 | INSERT_PADDING_WORDS(0x9); | 34 | INSERT_PADDING_WORDS(0x3); |
| 35 | |||
| 36 | BitField<0, 1, u32> clip_enable; | ||
| 37 | BitField<0, 24, u32> clip_coef[4]; // float24 | ||
| 38 | |||
| 39 | Math::Vec4<float24> GetClipCoef() const { | ||
| 40 | return {float24::FromRaw(clip_coef[0]), float24::FromRaw(clip_coef[1]), | ||
| 41 | float24::FromRaw(clip_coef[2]), float24::FromRaw(clip_coef[3])}; | ||
| 42 | } | ||
| 43 | |||
| 44 | INSERT_PADDING_WORDS(0x1); | ||
| 35 | 45 | ||
| 36 | BitField<0, 24, u32> viewport_depth_range; // float24 | 46 | BitField<0, 24, u32> viewport_depth_range; // float24 |
| 37 | BitField<0, 24, u32> viewport_depth_near_plane; // float24 | 47 | BitField<0, 24, u32> viewport_depth_near_plane; // float24 |
diff --git a/src/video_core/regs_shader.h b/src/video_core/regs_shader.h index ddb1ee451..c15d4d162 100644 --- a/src/video_core/regs_shader.h +++ b/src/video_core/regs_shader.h | |||
| @@ -24,9 +24,16 @@ struct ShaderRegs { | |||
| 24 | 24 | ||
| 25 | INSERT_PADDING_WORDS(0x4); | 25 | INSERT_PADDING_WORDS(0x4); |
| 26 | 26 | ||
| 27 | enum ShaderMode { | ||
| 28 | GS = 0x08, | ||
| 29 | VS = 0xA0, | ||
| 30 | }; | ||
| 31 | |||
| 27 | union { | 32 | union { |
| 28 | // Number of input attributes to shader unit - 1 | 33 | // Number of input attributes to shader unit - 1 |
| 29 | BitField<0, 4, u32> max_input_attribute_index; | 34 | BitField<0, 4, u32> max_input_attribute_index; |
| 35 | BitField<8, 8, u32> input_to_uniform; | ||
| 36 | BitField<24, 8, ShaderMode> shader_mode; | ||
| 30 | }; | 37 | }; |
| 31 | 38 | ||
| 32 | // Offset to shader program entry point (in words) | 39 | // Offset to shader program entry point (in words) |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 1c6c15a58..7e09e4712 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -28,6 +28,9 @@ MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255)); | |||
| 28 | MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); | 28 | MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); |
| 29 | 29 | ||
| 30 | RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) { | 30 | RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) { |
| 31 | // Clipping plane 0 is always enabled for PICA fixed clip plane z <= 0 | ||
| 32 | state.clip_distance[0] = true; | ||
| 33 | |||
| 31 | // Create sampler objects | 34 | // Create sampler objects |
| 32 | for (size_t i = 0; i < texture_samplers.size(); ++i) { | 35 | for (size_t i = 0; i < texture_samplers.size(); ++i) { |
| 33 | texture_samplers[i].Create(); | 36 | texture_samplers[i].Create(); |
| @@ -166,6 +169,8 @@ RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) { | |||
| 166 | glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, proctex_diff_lut_buffer.handle); | 169 | glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, proctex_diff_lut_buffer.handle); |
| 167 | 170 | ||
| 168 | // Sync fixed function OpenGL state | 171 | // Sync fixed function OpenGL state |
| 172 | SyncClipEnabled(); | ||
| 173 | SyncClipCoef(); | ||
| 169 | SyncCullMode(); | 174 | SyncCullMode(); |
| 170 | SyncBlendEnabled(); | 175 | SyncBlendEnabled(); |
| 171 | SyncBlendFuncs(); | 176 | SyncBlendFuncs(); |
| @@ -232,13 +237,24 @@ void RasterizerOpenGL::DrawTriangles() { | |||
| 232 | 237 | ||
| 233 | glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, | 238 | glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, |
| 234 | color_surface != nullptr ? color_surface->texture.handle : 0, 0); | 239 | color_surface != nullptr ? color_surface->texture.handle : 0, 0); |
| 235 | glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, | 240 | if (depth_surface != nullptr) { |
| 236 | depth_surface != nullptr ? depth_surface->texture.handle : 0, 0); | 241 | if (regs.framebuffer.framebuffer.depth_format == |
| 237 | bool has_stencil = | 242 | Pica::FramebufferRegs::DepthFormat::D24S8) { |
| 238 | regs.framebuffer.framebuffer.depth_format == Pica::FramebufferRegs::DepthFormat::D24S8; | 243 | // attach both depth and stencil |
| 239 | glFramebufferTexture2D( | 244 | glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, |
| 240 | GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, | 245 | depth_surface->texture.handle, 0); |
| 241 | (has_stencil && depth_surface != nullptr) ? depth_surface->texture.handle : 0, 0); | 246 | } else { |
| 247 | // attach depth | ||
| 248 | glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, | ||
| 249 | depth_surface->texture.handle, 0); | ||
| 250 | // clear stencil attachment | ||
| 251 | glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); | ||
| 252 | } | ||
| 253 | } else { | ||
| 254 | // clear both depth and stencil attachment | ||
| 255 | glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, | ||
| 256 | 0); | ||
| 257 | } | ||
| 242 | 258 | ||
| 243 | // Sync the viewport | 259 | // Sync the viewport |
| 244 | // These registers hold half-width and half-height, so must be multiplied by 2 | 260 | // These registers hold half-width and half-height, so must be multiplied by 2 |
| @@ -398,6 +414,18 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) { | |||
| 398 | SyncCullMode(); | 414 | SyncCullMode(); |
| 399 | break; | 415 | break; |
| 400 | 416 | ||
| 417 | // Clipping plane | ||
| 418 | case PICA_REG_INDEX(rasterizer.clip_enable): | ||
| 419 | SyncClipEnabled(); | ||
| 420 | break; | ||
| 421 | |||
| 422 | case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[0], 0x48): | ||
| 423 | case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[1], 0x49): | ||
| 424 | case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[2], 0x4a): | ||
| 425 | case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[3], 0x4b): | ||
| 426 | SyncClipCoef(); | ||
| 427 | break; | ||
| 428 | |||
| 401 | // Depth modifiers | 429 | // Depth modifiers |
| 402 | case PICA_REG_INDEX(rasterizer.viewport_depth_range): | 430 | case PICA_REG_INDEX(rasterizer.viewport_depth_range): |
| 403 | SyncDepthScale(); | 431 | SyncDepthScale(); |
| @@ -1277,6 +1305,20 @@ void RasterizerOpenGL::SetShader() { | |||
| 1277 | } | 1305 | } |
| 1278 | } | 1306 | } |
| 1279 | 1307 | ||
| 1308 | void RasterizerOpenGL::SyncClipEnabled() { | ||
| 1309 | state.clip_distance[1] = Pica::g_state.regs.rasterizer.clip_enable != 0; | ||
| 1310 | } | ||
| 1311 | |||
| 1312 | void RasterizerOpenGL::SyncClipCoef() { | ||
| 1313 | const auto raw_clip_coef = Pica::g_state.regs.rasterizer.GetClipCoef(); | ||
| 1314 | const GLvec4 new_clip_coef = {raw_clip_coef.x.ToFloat32(), raw_clip_coef.y.ToFloat32(), | ||
| 1315 | raw_clip_coef.z.ToFloat32(), raw_clip_coef.w.ToFloat32()}; | ||
| 1316 | if (new_clip_coef != uniform_block_data.data.clip_coef) { | ||
| 1317 | uniform_block_data.data.clip_coef = new_clip_coef; | ||
| 1318 | uniform_block_data.dirty = true; | ||
| 1319 | } | ||
| 1320 | } | ||
| 1321 | |||
| 1280 | void RasterizerOpenGL::SyncCullMode() { | 1322 | void RasterizerOpenGL::SyncCullMode() { |
| 1281 | const auto& regs = Pica::g_state.regs; | 1323 | const auto& regs = Pica::g_state.regs; |
| 1282 | 1324 | ||
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 78e218efe..46c62961c 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -151,14 +151,21 @@ private: | |||
| 151 | LightSrc light_src[8]; | 151 | LightSrc light_src[8]; |
| 152 | alignas(16) GLvec4 const_color[6]; // A vec4 color for each of the six tev stages | 152 | alignas(16) GLvec4 const_color[6]; // A vec4 color for each of the six tev stages |
| 153 | alignas(16) GLvec4 tev_combiner_buffer_color; | 153 | alignas(16) GLvec4 tev_combiner_buffer_color; |
| 154 | alignas(16) GLvec4 clip_coef; | ||
| 154 | }; | 155 | }; |
| 155 | 156 | ||
| 156 | static_assert( | 157 | static_assert( |
| 157 | sizeof(UniformData) == 0x460, | 158 | sizeof(UniformData) == 0x470, |
| 158 | "The size of the UniformData structure has changed, update the structure in the shader"); | 159 | "The size of the UniformData structure has changed, update the structure in the shader"); |
| 159 | static_assert(sizeof(UniformData) < 16384, | 160 | static_assert(sizeof(UniformData) < 16384, |
| 160 | "UniformData structure must be less than 16kb as per the OpenGL spec"); | 161 | "UniformData structure must be less than 16kb as per the OpenGL spec"); |
| 161 | 162 | ||
| 163 | /// Syncs the clip enabled status to match the PICA register | ||
| 164 | void SyncClipEnabled(); | ||
| 165 | |||
| 166 | /// Syncs the clip coefficients to match the PICA register | ||
| 167 | void SyncClipCoef(); | ||
| 168 | |||
| 162 | /// Sets the OpenGL shader in accordance with the current PICA register state | 169 | /// Sets the OpenGL shader in accordance with the current PICA register state |
| 163 | void SetShader(); | 170 | void SetShader(); |
| 164 | 171 | ||
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index bb192affd..9fe183944 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp | |||
| @@ -8,6 +8,7 @@ | |||
| 8 | #include "common/assert.h" | 8 | #include "common/assert.h" |
| 9 | #include "common/bit_field.h" | 9 | #include "common/bit_field.h" |
| 10 | #include "common/logging/log.h" | 10 | #include "common/logging/log.h" |
| 11 | #include "core/core.h" | ||
| 11 | #include "video_core/regs_framebuffer.h" | 12 | #include "video_core/regs_framebuffer.h" |
| 12 | #include "video_core/regs_lighting.h" | 13 | #include "video_core/regs_lighting.h" |
| 13 | #include "video_core/regs_rasterizer.h" | 14 | #include "video_core/regs_rasterizer.h" |
| @@ -24,6 +25,42 @@ using TevStageConfig = TexturingRegs::TevStageConfig; | |||
| 24 | 25 | ||
| 25 | namespace GLShader { | 26 | namespace GLShader { |
| 26 | 27 | ||
| 28 | static const std::string UniformBlockDef = R"( | ||
| 29 | #define NUM_TEV_STAGES 6 | ||
| 30 | #define NUM_LIGHTS 8 | ||
| 31 | |||
| 32 | struct LightSrc { | ||
| 33 | vec3 specular_0; | ||
| 34 | vec3 specular_1; | ||
| 35 | vec3 diffuse; | ||
| 36 | vec3 ambient; | ||
| 37 | vec3 position; | ||
| 38 | vec3 spot_direction; | ||
| 39 | float dist_atten_bias; | ||
| 40 | float dist_atten_scale; | ||
| 41 | }; | ||
| 42 | |||
| 43 | layout (std140) uniform shader_data { | ||
| 44 | vec2 framebuffer_scale; | ||
| 45 | int alphatest_ref; | ||
| 46 | float depth_scale; | ||
| 47 | float depth_offset; | ||
| 48 | int scissor_x1; | ||
| 49 | int scissor_y1; | ||
| 50 | int scissor_x2; | ||
| 51 | int scissor_y2; | ||
| 52 | vec3 fog_color; | ||
| 53 | vec2 proctex_noise_f; | ||
| 54 | vec2 proctex_noise_a; | ||
| 55 | vec2 proctex_noise_p; | ||
| 56 | vec3 lighting_global_ambient; | ||
| 57 | LightSrc light_src[NUM_LIGHTS]; | ||
| 58 | vec4 const_color[NUM_TEV_STAGES]; | ||
| 59 | vec4 tev_combiner_buffer_color; | ||
| 60 | vec4 clip_coef; | ||
| 61 | }; | ||
| 62 | )"; | ||
| 63 | |||
| 27 | PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) { | 64 | PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) { |
| 28 | PicaShaderConfig res; | 65 | PicaShaderConfig res; |
| 29 | 66 | ||
| @@ -525,11 +562,12 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { | |||
| 525 | "float geo_factor = 1.0;\n"; | 562 | "float geo_factor = 1.0;\n"; |
| 526 | 563 | ||
| 527 | // Compute fragment normals and tangents | 564 | // Compute fragment normals and tangents |
| 528 | const std::string pertubation = | 565 | auto Perturbation = [&]() { |
| 529 | "2.0 * (" + SampleTexture(config, lighting.bump_selector) + ").rgb - 1.0"; | 566 | return "2.0 * (" + SampleTexture(config, lighting.bump_selector) + ").rgb - 1.0"; |
| 567 | }; | ||
| 530 | if (lighting.bump_mode == LightingRegs::LightingBumpMode::NormalMap) { | 568 | if (lighting.bump_mode == LightingRegs::LightingBumpMode::NormalMap) { |
| 531 | // Bump mapping is enabled using a normal map | 569 | // Bump mapping is enabled using a normal map |
| 532 | out += "vec3 surface_normal = " + pertubation + ";\n"; | 570 | out += "vec3 surface_normal = " + Perturbation() + ";\n"; |
| 533 | 571 | ||
| 534 | // Recompute Z-component of perturbation if 'renorm' is enabled, this provides a higher | 572 | // Recompute Z-component of perturbation if 'renorm' is enabled, this provides a higher |
| 535 | // precision result | 573 | // precision result |
| @@ -543,7 +581,7 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { | |||
| 543 | out += "vec3 surface_tangent = vec3(1.0, 0.0, 0.0);\n"; | 581 | out += "vec3 surface_tangent = vec3(1.0, 0.0, 0.0);\n"; |
| 544 | } else if (lighting.bump_mode == LightingRegs::LightingBumpMode::TangentMap) { | 582 | } else if (lighting.bump_mode == LightingRegs::LightingBumpMode::TangentMap) { |
| 545 | // Bump mapping is enabled using a tangent map | 583 | // Bump mapping is enabled using a tangent map |
| 546 | out += "vec3 surface_tangent = " + pertubation + ";\n"; | 584 | out += "vec3 surface_tangent = " + Perturbation() + ";\n"; |
| 547 | // Mathematically, recomputing Z-component of the tangent vector won't affect the relevant | 585 | // Mathematically, recomputing Z-component of the tangent vector won't affect the relevant |
| 548 | // computation below, which is also confirmed on 3DS. So we don't bother recomputing here | 586 | // computation below, which is also confirmed on 3DS. So we don't bother recomputing here |
| 549 | // even if 'renorm' is enabled. | 587 | // even if 'renorm' is enabled. |
| @@ -593,8 +631,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { | |||
| 593 | // Note: even if the normal vector is modified by normal map, which is not the | 631 | // Note: even if the normal vector is modified by normal map, which is not the |
| 594 | // normal of the tangent plane anymore, the half angle vector is still projected | 632 | // normal of the tangent plane anymore, the half angle vector is still projected |
| 595 | // using the modified normal vector. | 633 | // using the modified normal vector. |
| 596 | std::string half_angle_proj = "normalize(half_vector) - normal / dot(normal, " | 634 | std::string half_angle_proj = |
| 597 | "normal) * dot(normal, normalize(half_vector))"; | 635 | "normalize(half_vector) - normal * dot(normal, normalize(half_vector))"; |
| 598 | // Note: the half angle vector projection is confirmed not normalized before the dot | 636 | // Note: the half angle vector projection is confirmed not normalized before the dot |
| 599 | // product. The result is in fact not cos(phi) as the name suggested. | 637 | // product. The result is in fact not cos(phi) as the name suggested. |
| 600 | index = "dot(" + half_angle_proj + ", tangent)"; | 638 | index = "dot(" + half_angle_proj + ", tangent)"; |
| @@ -749,7 +787,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { | |||
| 749 | } | 787 | } |
| 750 | 788 | ||
| 751 | // Fresnel | 789 | // Fresnel |
| 752 | if (lighting.lut_fr.enable && | 790 | // Note: only the last entry in the light slots applies the Fresnel factor |
| 791 | if (light_index == lighting.src_num - 1 && lighting.lut_fr.enable && | ||
| 753 | LightingRegs::IsLightingSamplerSupported(lighting.config, | 792 | LightingRegs::IsLightingSamplerSupported(lighting.config, |
| 754 | LightingRegs::LightingSampler::Fresnel)) { | 793 | LightingRegs::LightingSampler::Fresnel)) { |
| 755 | // Lookup fresnel LUT value | 794 | // Lookup fresnel LUT value |
| @@ -758,17 +797,17 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { | |||
| 758 | lighting.lut_fr.type, lighting.lut_fr.abs_input); | 797 | lighting.lut_fr.type, lighting.lut_fr.abs_input); |
| 759 | value = "(" + std::to_string(lighting.lut_fr.scale) + " * " + value + ")"; | 798 | value = "(" + std::to_string(lighting.lut_fr.scale) + " * " + value + ")"; |
| 760 | 799 | ||
| 761 | // Enabled for difffuse lighting alpha component | 800 | // Enabled for diffuse lighting alpha component |
| 762 | if (lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || | 801 | if (lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || |
| 763 | lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { | 802 | lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { |
| 764 | out += "diffuse_sum.a *= " + value + ";\n"; | 803 | out += "diffuse_sum.a = " + value + ";\n"; |
| 765 | } | 804 | } |
| 766 | 805 | ||
| 767 | // Enabled for the specular lighting alpha component | 806 | // Enabled for the specular lighting alpha component |
| 768 | if (lighting.fresnel_selector == | 807 | if (lighting.fresnel_selector == |
| 769 | LightingRegs::LightingFresnelSelector::SecondaryAlpha || | 808 | LightingRegs::LightingFresnelSelector::SecondaryAlpha || |
| 770 | lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { | 809 | lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { |
| 771 | out += "specular_sum.a *= " + value + ";\n"; | 810 | out += "specular_sum.a = " + value + ";\n"; |
| 772 | } | 811 | } |
| 773 | } | 812 | } |
| 774 | 813 | ||
| @@ -1007,8 +1046,6 @@ std::string GenerateFragmentShader(const PicaShaderConfig& config) { | |||
| 1007 | 1046 | ||
| 1008 | std::string out = R"( | 1047 | std::string out = R"( |
| 1009 | #version 330 core | 1048 | #version 330 core |
| 1010 | #define NUM_TEV_STAGES 6 | ||
| 1011 | #define NUM_LIGHTS 8 | ||
| 1012 | 1049 | ||
| 1013 | in vec4 primary_color; | 1050 | in vec4 primary_color; |
| 1014 | in vec2 texcoord[3]; | 1051 | in vec2 texcoord[3]; |
| @@ -1020,36 +1057,6 @@ in vec4 gl_FragCoord; | |||
| 1020 | 1057 | ||
| 1021 | out vec4 color; | 1058 | out vec4 color; |
| 1022 | 1059 | ||
| 1023 | struct LightSrc { | ||
| 1024 | vec3 specular_0; | ||
| 1025 | vec3 specular_1; | ||
| 1026 | vec3 diffuse; | ||
| 1027 | vec3 ambient; | ||
| 1028 | vec3 position; | ||
| 1029 | vec3 spot_direction; | ||
| 1030 | float dist_atten_bias; | ||
| 1031 | float dist_atten_scale; | ||
| 1032 | }; | ||
| 1033 | |||
| 1034 | layout (std140) uniform shader_data { | ||
| 1035 | vec2 framebuffer_scale; | ||
| 1036 | int alphatest_ref; | ||
| 1037 | float depth_scale; | ||
| 1038 | float depth_offset; | ||
| 1039 | int scissor_x1; | ||
| 1040 | int scissor_y1; | ||
| 1041 | int scissor_x2; | ||
| 1042 | int scissor_y2; | ||
| 1043 | vec3 fog_color; | ||
| 1044 | vec2 proctex_noise_f; | ||
| 1045 | vec2 proctex_noise_a; | ||
| 1046 | vec2 proctex_noise_p; | ||
| 1047 | vec3 lighting_global_ambient; | ||
| 1048 | LightSrc light_src[NUM_LIGHTS]; | ||
| 1049 | vec4 const_color[NUM_TEV_STAGES]; | ||
| 1050 | vec4 tev_combiner_buffer_color; | ||
| 1051 | }; | ||
| 1052 | |||
| 1053 | uniform sampler2D tex[3]; | 1060 | uniform sampler2D tex[3]; |
| 1054 | uniform samplerBuffer lighting_lut; | 1061 | uniform samplerBuffer lighting_lut; |
| 1055 | uniform samplerBuffer fog_lut; | 1062 | uniform samplerBuffer fog_lut; |
| @@ -1058,7 +1065,11 @@ uniform samplerBuffer proctex_color_map; | |||
| 1058 | uniform samplerBuffer proctex_alpha_map; | 1065 | uniform samplerBuffer proctex_alpha_map; |
| 1059 | uniform samplerBuffer proctex_lut; | 1066 | uniform samplerBuffer proctex_lut; |
| 1060 | uniform samplerBuffer proctex_diff_lut; | 1067 | uniform samplerBuffer proctex_diff_lut; |
| 1068 | )"; | ||
| 1069 | |||
| 1070 | out += UniformBlockDef; | ||
| 1061 | 1071 | ||
| 1072 | out += R"( | ||
| 1062 | // Rotate the vector v by the quaternion q | 1073 | // Rotate the vector v by the quaternion q |
| 1063 | vec3 quaternion_rotate(vec4 q, vec3 v) { | 1074 | vec3 quaternion_rotate(vec4 q, vec3 v) { |
| 1064 | return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); | 1075 | return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); |
| @@ -1111,7 +1122,10 @@ vec4 secondary_fragment_color = vec4(0.0); | |||
| 1111 | "gl_FragCoord.y < scissor_y2)) discard;\n"; | 1122 | "gl_FragCoord.y < scissor_y2)) discard;\n"; |
| 1112 | } | 1123 | } |
| 1113 | 1124 | ||
| 1114 | out += "float z_over_w = 1.0 - gl_FragCoord.z * 2.0;\n"; | 1125 | // After perspective divide, OpenGL transform z_over_w from [-1, 1] to [near, far]. Here we use |
| 1126 | // default near = 0 and far = 1, and undo the transformation to get the original z_over_w, then | ||
| 1127 | // do our own transformation according to PICA specification. | ||
| 1128 | out += "float z_over_w = 2.0 * gl_FragCoord.z - 1.0;\n"; | ||
| 1115 | out += "float depth = z_over_w * depth_scale + depth_offset;\n"; | 1129 | out += "float depth = z_over_w * depth_scale + depth_offset;\n"; |
| 1116 | if (state.depthmap_enable == RasterizerRegs::DepthBuffering::WBuffering) { | 1130 | if (state.depthmap_enable == RasterizerRegs::DepthBuffering::WBuffering) { |
| 1117 | out += "depth /= gl_FragCoord.w;\n"; | 1131 | out += "depth /= gl_FragCoord.w;\n"; |
| @@ -1151,6 +1165,11 @@ vec4 secondary_fragment_color = vec4(0.0); | |||
| 1151 | 1165 | ||
| 1152 | // Blend the fog | 1166 | // Blend the fog |
| 1153 | out += "last_tex_env_out.rgb = mix(fog_color.rgb, last_tex_env_out.rgb, fog_factor);\n"; | 1167 | out += "last_tex_env_out.rgb = mix(fog_color.rgb, last_tex_env_out.rgb, fog_factor);\n"; |
| 1168 | } else if (state.fog_mode == TexturingRegs::FogMode::Gas) { | ||
| 1169 | Core::Telemetry().AddField(Telemetry::FieldType::Session, "VideoCore_Pica_UseGasMode", | ||
| 1170 | true); | ||
| 1171 | LOG_CRITICAL(Render_OpenGL, "Unimplemented gas mode"); | ||
| 1172 | UNIMPLEMENTED(); | ||
| 1154 | } | 1173 | } |
| 1155 | 1174 | ||
| 1156 | out += "gl_FragDepth = depth;\n"; | 1175 | out += "gl_FragDepth = depth;\n"; |
| @@ -1186,6 +1205,12 @@ out float texcoord0_w; | |||
| 1186 | out vec4 normquat; | 1205 | out vec4 normquat; |
| 1187 | out vec3 view; | 1206 | out vec3 view; |
| 1188 | 1207 | ||
| 1208 | )"; | ||
| 1209 | |||
| 1210 | out += UniformBlockDef; | ||
| 1211 | |||
| 1212 | out += R"( | ||
| 1213 | |||
| 1189 | void main() { | 1214 | void main() { |
| 1190 | primary_color = vert_color; | 1215 | primary_color = vert_color; |
| 1191 | texcoord[0] = vert_texcoord0; | 1216 | texcoord[0] = vert_texcoord0; |
| @@ -1194,7 +1219,9 @@ void main() { | |||
| 1194 | texcoord0_w = vert_texcoord0_w; | 1219 | texcoord0_w = vert_texcoord0_w; |
| 1195 | normquat = vert_normquat; | 1220 | normquat = vert_normquat; |
| 1196 | view = vert_view; | 1221 | view = vert_view; |
| 1197 | gl_Position = vec4(vert_position.x, vert_position.y, -vert_position.z, vert_position.w); | 1222 | gl_Position = vert_position; |
| 1223 | gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0 | ||
| 1224 | gl_ClipDistance[1] = dot(clip_coef, vert_position); | ||
| 1198 | } | 1225 | } |
| 1199 | )"; | 1226 | )"; |
| 1200 | 1227 | ||
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index bc9d34b84..5770ae08f 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp | |||
| @@ -68,6 +68,8 @@ OpenGLState::OpenGLState() { | |||
| 68 | draw.vertex_buffer = 0; | 68 | draw.vertex_buffer = 0; |
| 69 | draw.uniform_buffer = 0; | 69 | draw.uniform_buffer = 0; |
| 70 | draw.shader_program = 0; | 70 | draw.shader_program = 0; |
| 71 | |||
| 72 | clip_distance = {}; | ||
| 71 | } | 73 | } |
| 72 | 74 | ||
| 73 | void OpenGLState::Apply() const { | 75 | void OpenGLState::Apply() const { |
| @@ -261,6 +263,17 @@ void OpenGLState::Apply() const { | |||
| 261 | glUseProgram(draw.shader_program); | 263 | glUseProgram(draw.shader_program); |
| 262 | } | 264 | } |
| 263 | 265 | ||
| 266 | // Clip distance | ||
| 267 | for (size_t i = 0; i < clip_distance.size(); ++i) { | ||
| 268 | if (clip_distance[i] != cur_state.clip_distance[i]) { | ||
| 269 | if (clip_distance[i]) { | ||
| 270 | glEnable(GL_CLIP_DISTANCE0 + static_cast<GLenum>(i)); | ||
| 271 | } else { | ||
| 272 | glDisable(GL_CLIP_DISTANCE0 + static_cast<GLenum>(i)); | ||
| 273 | } | ||
| 274 | } | ||
| 275 | } | ||
| 276 | |||
| 264 | cur_state = *this; | 277 | cur_state = *this; |
| 265 | } | 278 | } |
| 266 | 279 | ||
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h index 745a74479..437fe34c4 100644 --- a/src/video_core/renderer_opengl/gl_state.h +++ b/src/video_core/renderer_opengl/gl_state.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <array> | ||
| 7 | #include <glad/glad.h> | 8 | #include <glad/glad.h> |
| 8 | 9 | ||
| 9 | namespace TextureUnits { | 10 | namespace TextureUnits { |
| @@ -123,6 +124,8 @@ public: | |||
| 123 | GLuint shader_program; // GL_CURRENT_PROGRAM | 124 | GLuint shader_program; // GL_CURRENT_PROGRAM |
| 124 | } draw; | 125 | } draw; |
| 125 | 126 | ||
| 127 | std::array<bool, 2> clip_distance; // GL_CLIP_DISTANCE | ||
| 128 | |||
| 126 | OpenGLState(); | 129 | OpenGLState(); |
| 127 | 130 | ||
| 128 | /// Get the currently active OpenGL state | 131 | /// Get the currently active OpenGL state |
diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index 67ed19ba8..2857d2829 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp | |||
| @@ -21,7 +21,8 @@ namespace Pica { | |||
| 21 | 21 | ||
| 22 | namespace Shader { | 22 | namespace Shader { |
| 23 | 23 | ||
| 24 | OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs, AttributeBuffer& input) { | 24 | OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs, |
| 25 | const AttributeBuffer& input) { | ||
| 25 | // Setup output data | 26 | // Setup output data |
| 26 | union { | 27 | union { |
| 27 | OutputVertex ret{}; | 28 | OutputVertex ret{}; |
| @@ -51,7 +52,8 @@ OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs, Attri | |||
| 51 | // The hardware takes the absolute and saturates vertex colors like this, *before* doing | 52 | // The hardware takes the absolute and saturates vertex colors like this, *before* doing |
| 52 | // interpolation | 53 | // interpolation |
| 53 | for (unsigned i = 0; i < 4; ++i) { | 54 | for (unsigned i = 0; i < 4; ++i) { |
| 54 | ret.color[i] = float24::FromFloat32(std::fmin(std::fabs(ret.color[i].ToFloat32()), 1.0f)); | 55 | float c = std::fabs(ret.color[i].ToFloat32()); |
| 56 | ret.color[i] = float24::FromFloat32(c < 1.0f ? c : 1.0f); | ||
| 55 | } | 57 | } |
| 56 | 58 | ||
| 57 | LOG_TRACE(HW_GPU, "Output vertex: pos(%.2f, %.2f, %.2f, %.2f), quat(%.2f, %.2f, %.2f, %.2f), " | 59 | LOG_TRACE(HW_GPU, "Output vertex: pos(%.2f, %.2f, %.2f, %.2f), quat(%.2f, %.2f, %.2f, %.2f), " |
| @@ -82,6 +84,44 @@ void UnitState::WriteOutput(const ShaderRegs& config, AttributeBuffer& output) { | |||
| 82 | } | 84 | } |
| 83 | } | 85 | } |
| 84 | 86 | ||
| 87 | UnitState::UnitState(GSEmitter* emitter) : emitter_ptr(emitter) {} | ||
| 88 | |||
| 89 | GSEmitter::GSEmitter() { | ||
| 90 | handlers = new Handlers; | ||
| 91 | } | ||
| 92 | |||
| 93 | GSEmitter::~GSEmitter() { | ||
| 94 | delete handlers; | ||
| 95 | } | ||
| 96 | |||
| 97 | void GSEmitter::Emit(Math::Vec4<float24> (&vertex)[16]) { | ||
| 98 | ASSERT(vertex_id < 3); | ||
| 99 | std::copy(std::begin(vertex), std::end(vertex), buffer[vertex_id].begin()); | ||
| 100 | if (prim_emit) { | ||
| 101 | if (winding) | ||
| 102 | handlers->winding_setter(); | ||
| 103 | for (size_t i = 0; i < buffer.size(); ++i) { | ||
| 104 | AttributeBuffer output; | ||
| 105 | unsigned int output_i = 0; | ||
| 106 | for (unsigned int reg : Common::BitSet<u32>(output_mask)) { | ||
| 107 | output.attr[output_i++] = buffer[i][reg]; | ||
| 108 | } | ||
| 109 | handlers->vertex_handler(output); | ||
| 110 | } | ||
| 111 | } | ||
| 112 | } | ||
| 113 | |||
| 114 | GSUnitState::GSUnitState() : UnitState(&emitter) {} | ||
| 115 | |||
| 116 | void GSUnitState::SetVertexHandler(VertexHandler vertex_handler, WindingSetter winding_setter) { | ||
| 117 | emitter.handlers->vertex_handler = std::move(vertex_handler); | ||
| 118 | emitter.handlers->winding_setter = std::move(winding_setter); | ||
| 119 | } | ||
| 120 | |||
| 121 | void GSUnitState::ConfigOutput(const ShaderRegs& config) { | ||
| 122 | emitter.output_mask = config.output_mask; | ||
| 123 | } | ||
| 124 | |||
| 85 | MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240)); | 125 | MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240)); |
| 86 | 126 | ||
| 87 | #ifdef ARCHITECTURE_x86_64 | 127 | #ifdef ARCHITECTURE_x86_64 |
diff --git a/src/video_core/shader/shader.h b/src/video_core/shader/shader.h index e156f6aef..a3789da01 100644 --- a/src/video_core/shader/shader.h +++ b/src/video_core/shader/shader.h | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | 6 | ||
| 7 | #include <array> | 7 | #include <array> |
| 8 | #include <cstddef> | 8 | #include <cstddef> |
| 9 | #include <functional> | ||
| 9 | #include <type_traits> | 10 | #include <type_traits> |
| 10 | #include <nihstro/shader_bytecode.h> | 11 | #include <nihstro/shader_bytecode.h> |
| 11 | #include "common/assert.h" | 12 | #include "common/assert.h" |
| @@ -31,6 +32,12 @@ struct AttributeBuffer { | |||
| 31 | alignas(16) Math::Vec4<float24> attr[16]; | 32 | alignas(16) Math::Vec4<float24> attr[16]; |
| 32 | }; | 33 | }; |
| 33 | 34 | ||
| 35 | /// Handler type for receiving vertex outputs from vertex shader or geometry shader | ||
| 36 | using VertexHandler = std::function<void(const AttributeBuffer&)>; | ||
| 37 | |||
| 38 | /// Handler type for signaling to invert the vertex order of the next triangle | ||
| 39 | using WindingSetter = std::function<void()>; | ||
| 40 | |||
| 34 | struct OutputVertex { | 41 | struct OutputVertex { |
| 35 | Math::Vec4<float24> pos; | 42 | Math::Vec4<float24> pos; |
| 36 | Math::Vec4<float24> quat; | 43 | Math::Vec4<float24> quat; |
| @@ -43,7 +50,8 @@ struct OutputVertex { | |||
| 43 | INSERT_PADDING_WORDS(1); | 50 | INSERT_PADDING_WORDS(1); |
| 44 | Math::Vec2<float24> tc2; | 51 | Math::Vec2<float24> tc2; |
| 45 | 52 | ||
| 46 | static OutputVertex FromAttributeBuffer(const RasterizerRegs& regs, AttributeBuffer& output); | 53 | static OutputVertex FromAttributeBuffer(const RasterizerRegs& regs, |
| 54 | const AttributeBuffer& output); | ||
| 47 | }; | 55 | }; |
| 48 | #define ASSERT_POS(var, pos) \ | 56 | #define ASSERT_POS(var, pos) \ |
| 49 | static_assert(offsetof(OutputVertex, var) == pos * sizeof(float24), "Semantic at wrong " \ | 57 | static_assert(offsetof(OutputVertex, var) == pos * sizeof(float24), "Semantic at wrong " \ |
| @@ -61,12 +69,36 @@ static_assert(std::is_pod<OutputVertex>::value, "Structure is not POD"); | |||
| 61 | static_assert(sizeof(OutputVertex) == 24 * sizeof(float), "OutputVertex has invalid size"); | 69 | static_assert(sizeof(OutputVertex) == 24 * sizeof(float), "OutputVertex has invalid size"); |
| 62 | 70 | ||
| 63 | /** | 71 | /** |
| 72 | * This structure contains state information for primitive emitting in geometry shader. | ||
| 73 | */ | ||
| 74 | struct GSEmitter { | ||
| 75 | std::array<std::array<Math::Vec4<float24>, 16>, 3> buffer; | ||
| 76 | u8 vertex_id; | ||
| 77 | bool prim_emit; | ||
| 78 | bool winding; | ||
| 79 | u32 output_mask; | ||
| 80 | |||
| 81 | // Function objects are hidden behind a raw pointer to make the structure standard layout type, | ||
| 82 | // for JIT to use offsetof to access other members. | ||
| 83 | struct Handlers { | ||
| 84 | VertexHandler vertex_handler; | ||
| 85 | WindingSetter winding_setter; | ||
| 86 | } * handlers; | ||
| 87 | |||
| 88 | GSEmitter(); | ||
| 89 | ~GSEmitter(); | ||
| 90 | void Emit(Math::Vec4<float24> (&vertex)[16]); | ||
| 91 | }; | ||
| 92 | static_assert(std::is_standard_layout<GSEmitter>::value, "GSEmitter is not standard layout type"); | ||
| 93 | |||
| 94 | /** | ||
| 64 | * This structure contains the state information that needs to be unique for a shader unit. The 3DS | 95 | * This structure contains the state information that needs to be unique for a shader unit. The 3DS |
| 65 | * has four shader units that process shaders in parallel. At the present, Citra only implements a | 96 | * has four shader units that process shaders in parallel. At the present, Citra only implements a |
| 66 | * single shader unit that processes all shaders serially. Putting the state information in a struct | 97 | * single shader unit that processes all shaders serially. Putting the state information in a struct |
| 67 | * here will make it easier for us to parallelize the shader processing later. | 98 | * here will make it easier for us to parallelize the shader processing later. |
| 68 | */ | 99 | */ |
| 69 | struct UnitState { | 100 | struct UnitState { |
| 101 | explicit UnitState(GSEmitter* emitter = nullptr); | ||
| 70 | struct Registers { | 102 | struct Registers { |
| 71 | // The registers are accessed by the shader JIT using SSE instructions, and are therefore | 103 | // The registers are accessed by the shader JIT using SSE instructions, and are therefore |
| 72 | // required to be 16-byte aligned. | 104 | // required to be 16-byte aligned. |
| @@ -82,6 +114,8 @@ struct UnitState { | |||
| 82 | // TODO: How many bits do these actually have? | 114 | // TODO: How many bits do these actually have? |
| 83 | s32 address_registers[3]; | 115 | s32 address_registers[3]; |
| 84 | 116 | ||
| 117 | GSEmitter* emitter_ptr; | ||
| 118 | |||
| 85 | static size_t InputOffset(const SourceRegister& reg) { | 119 | static size_t InputOffset(const SourceRegister& reg) { |
| 86 | switch (reg.GetRegisterType()) { | 120 | switch (reg.GetRegisterType()) { |
| 87 | case RegisterType::Input: | 121 | case RegisterType::Input: |
| @@ -125,6 +159,19 @@ struct UnitState { | |||
| 125 | void WriteOutput(const ShaderRegs& config, AttributeBuffer& output); | 159 | void WriteOutput(const ShaderRegs& config, AttributeBuffer& output); |
| 126 | }; | 160 | }; |
| 127 | 161 | ||
| 162 | /** | ||
| 163 | * This is an extended shader unit state that represents the special unit that can run both vertex | ||
| 164 | * shader and geometry shader. It contains an additional primitive emitter and utilities for | ||
| 165 | * geometry shader. | ||
| 166 | */ | ||
| 167 | struct GSUnitState : public UnitState { | ||
| 168 | GSUnitState(); | ||
| 169 | void SetVertexHandler(VertexHandler vertex_handler, WindingSetter winding_setter); | ||
| 170 | void ConfigOutput(const ShaderRegs& config); | ||
| 171 | |||
| 172 | GSEmitter emitter; | ||
| 173 | }; | ||
| 174 | |||
| 128 | struct ShaderSetup { | 175 | struct ShaderSetup { |
| 129 | struct { | 176 | struct { |
| 130 | // The float uniforms are accessed by the shader JIT using SSE instructions, and are | 177 | // The float uniforms are accessed by the shader JIT using SSE instructions, and are |
diff --git a/src/video_core/shader/shader_interpreter.cpp b/src/video_core/shader/shader_interpreter.cpp index aa1cec81f..9d4da4904 100644 --- a/src/video_core/shader/shader_interpreter.cpp +++ b/src/video_core/shader/shader_interpreter.cpp | |||
| @@ -631,11 +631,27 @@ static void RunInterpreter(const ShaderSetup& setup, UnitState& state, DebugData | |||
| 631 | state.address_registers[2] = loop_param.y; | 631 | state.address_registers[2] = loop_param.y; |
| 632 | 632 | ||
| 633 | Record<DebugDataRecord::LOOP_INT_IN>(debug_data, iteration, loop_param); | 633 | Record<DebugDataRecord::LOOP_INT_IN>(debug_data, iteration, loop_param); |
| 634 | call(program_counter + 1, instr.flow_control.dest_offset - program_counter + 1, | 634 | call(program_counter + 1, instr.flow_control.dest_offset - program_counter, |
| 635 | instr.flow_control.dest_offset + 1, loop_param.x, loop_param.z); | 635 | instr.flow_control.dest_offset + 1, loop_param.x, loop_param.z); |
| 636 | break; | 636 | break; |
| 637 | } | 637 | } |
| 638 | 638 | ||
| 639 | case OpCode::Id::EMIT: { | ||
| 640 | GSEmitter* emitter = state.emitter_ptr; | ||
| 641 | ASSERT_MSG(emitter, "Execute EMIT on VS"); | ||
| 642 | emitter->Emit(state.registers.output); | ||
| 643 | break; | ||
| 644 | } | ||
| 645 | |||
| 646 | case OpCode::Id::SETEMIT: { | ||
| 647 | GSEmitter* emitter = state.emitter_ptr; | ||
| 648 | ASSERT_MSG(emitter, "Execute SETEMIT on VS"); | ||
| 649 | emitter->vertex_id = instr.setemit.vertex_id; | ||
| 650 | emitter->prim_emit = instr.setemit.prim_emit != 0; | ||
| 651 | emitter->winding = instr.setemit.winding != 0; | ||
| 652 | break; | ||
| 653 | } | ||
| 654 | |||
| 639 | default: | 655 | default: |
| 640 | LOG_ERROR(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", | 656 | LOG_ERROR(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", |
| 641 | (int)instr.opcode.Value().EffectiveOpCode(), | 657 | (int)instr.opcode.Value().EffectiveOpCode(), |
diff --git a/src/video_core/shader/shader_jit_x64_compiler.cpp b/src/video_core/shader/shader_jit_x64_compiler.cpp index 42a57aab1..1b31623bd 100644 --- a/src/video_core/shader/shader_jit_x64_compiler.cpp +++ b/src/video_core/shader/shader_jit_x64_compiler.cpp | |||
| @@ -75,8 +75,8 @@ const JitFunction instr_table[64] = { | |||
| 75 | &JitShader::Compile_IF, // ifu | 75 | &JitShader::Compile_IF, // ifu |
| 76 | &JitShader::Compile_IF, // ifc | 76 | &JitShader::Compile_IF, // ifc |
| 77 | &JitShader::Compile_LOOP, // loop | 77 | &JitShader::Compile_LOOP, // loop |
| 78 | nullptr, // emit | 78 | &JitShader::Compile_EMIT, // emit |
| 79 | nullptr, // sete | 79 | &JitShader::Compile_SETE, // sete |
| 80 | &JitShader::Compile_JMP, // jmpc | 80 | &JitShader::Compile_JMP, // jmpc |
| 81 | &JitShader::Compile_JMP, // jmpu | 81 | &JitShader::Compile_JMP, // jmpu |
| 82 | &JitShader::Compile_CMP, // cmp | 82 | &JitShader::Compile_CMP, // cmp |
| @@ -772,6 +772,51 @@ void JitShader::Compile_JMP(Instruction instr) { | |||
| 772 | } | 772 | } |
| 773 | } | 773 | } |
| 774 | 774 | ||
| 775 | static void Emit(GSEmitter* emitter, Math::Vec4<float24> (*output)[16]) { | ||
| 776 | emitter->Emit(*output); | ||
| 777 | } | ||
| 778 | |||
| 779 | void JitShader::Compile_EMIT(Instruction instr) { | ||
| 780 | Label have_emitter, end; | ||
| 781 | mov(rax, qword[STATE + offsetof(UnitState, emitter_ptr)]); | ||
| 782 | test(rax, rax); | ||
| 783 | jnz(have_emitter); | ||
| 784 | |||
| 785 | ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); | ||
| 786 | mov(ABI_PARAM1, reinterpret_cast<size_t>("Execute EMIT on VS")); | ||
| 787 | CallFarFunction(*this, LogCritical); | ||
| 788 | ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); | ||
| 789 | jmp(end); | ||
| 790 | |||
| 791 | L(have_emitter); | ||
| 792 | ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); | ||
| 793 | mov(ABI_PARAM1, rax); | ||
| 794 | mov(ABI_PARAM2, STATE); | ||
| 795 | add(ABI_PARAM2, static_cast<Xbyak::uint32>(offsetof(UnitState, registers.output))); | ||
| 796 | CallFarFunction(*this, Emit); | ||
| 797 | ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); | ||
| 798 | L(end); | ||
| 799 | } | ||
| 800 | |||
| 801 | void JitShader::Compile_SETE(Instruction instr) { | ||
| 802 | Label have_emitter, end; | ||
| 803 | mov(rax, qword[STATE + offsetof(UnitState, emitter_ptr)]); | ||
| 804 | test(rax, rax); | ||
| 805 | jnz(have_emitter); | ||
| 806 | |||
| 807 | ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); | ||
| 808 | mov(ABI_PARAM1, reinterpret_cast<size_t>("Execute SETEMIT on VS")); | ||
| 809 | CallFarFunction(*this, LogCritical); | ||
| 810 | ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); | ||
| 811 | jmp(end); | ||
| 812 | |||
| 813 | L(have_emitter); | ||
| 814 | mov(byte[rax + offsetof(GSEmitter, vertex_id)], instr.setemit.vertex_id); | ||
| 815 | mov(byte[rax + offsetof(GSEmitter, prim_emit)], instr.setemit.prim_emit); | ||
| 816 | mov(byte[rax + offsetof(GSEmitter, winding)], instr.setemit.winding); | ||
| 817 | L(end); | ||
| 818 | } | ||
| 819 | |||
| 775 | void JitShader::Compile_Block(unsigned end) { | 820 | void JitShader::Compile_Block(unsigned end) { |
| 776 | while (program_counter < end) { | 821 | while (program_counter < end) { |
| 777 | Compile_NextInstr(); | 822 | Compile_NextInstr(); |
diff --git a/src/video_core/shader/shader_jit_x64_compiler.h b/src/video_core/shader/shader_jit_x64_compiler.h index 31af0ca48..4aee56b1d 100644 --- a/src/video_core/shader/shader_jit_x64_compiler.h +++ b/src/video_core/shader/shader_jit_x64_compiler.h | |||
| @@ -66,6 +66,8 @@ public: | |||
| 66 | void Compile_JMP(Instruction instr); | 66 | void Compile_JMP(Instruction instr); |
| 67 | void Compile_CMP(Instruction instr); | 67 | void Compile_CMP(Instruction instr); |
| 68 | void Compile_MAD(Instruction instr); | 68 | void Compile_MAD(Instruction instr); |
| 69 | void Compile_EMIT(Instruction instr); | ||
| 70 | void Compile_SETE(Instruction instr); | ||
| 69 | 71 | ||
| 70 | private: | 72 | private: |
| 71 | void Compile_Block(unsigned end); | 73 | void Compile_Block(unsigned end); |
diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp index 6fb923756..c1ed48398 100644 --- a/src/video_core/swrasterizer/clipper.cpp +++ b/src/video_core/swrasterizer/clipper.cpp | |||
| @@ -31,7 +31,7 @@ public: | |||
| 31 | : coeffs(coeffs), bias(bias) {} | 31 | : coeffs(coeffs), bias(bias) {} |
| 32 | 32 | ||
| 33 | bool IsInside(const Vertex& vertex) const { | 33 | bool IsInside(const Vertex& vertex) const { |
| 34 | return Math::Dot(vertex.pos + bias, coeffs) <= float24::FromFloat32(0); | 34 | return Math::Dot(vertex.pos + bias, coeffs) >= float24::FromFloat32(0); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | bool IsOutSide(const Vertex& vertex) const { | 37 | bool IsOutSide(const Vertex& vertex) const { |
| @@ -95,6 +95,17 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu | |||
| 95 | static const size_t MAX_VERTICES = 9; | 95 | static const size_t MAX_VERTICES = 9; |
| 96 | static_vector<Vertex, MAX_VERTICES> buffer_a = {v0, v1, v2}; | 96 | static_vector<Vertex, MAX_VERTICES> buffer_a = {v0, v1, v2}; |
| 97 | static_vector<Vertex, MAX_VERTICES> buffer_b; | 97 | static_vector<Vertex, MAX_VERTICES> buffer_b; |
| 98 | |||
| 99 | auto FlipQuaternionIfOpposite = [](auto& a, const auto& b) { | ||
| 100 | if (Math::Dot(a, b) < float24::Zero()) | ||
| 101 | a = a * float24::FromFloat32(-1.0f); | ||
| 102 | }; | ||
| 103 | |||
| 104 | // Flip the quaternions if they are opposite to prevent interpolating them over the wrong | ||
| 105 | // direction. | ||
| 106 | FlipQuaternionIfOpposite(buffer_a[1].quat, buffer_a[0].quat); | ||
| 107 | FlipQuaternionIfOpposite(buffer_a[2].quat, buffer_a[0].quat); | ||
| 108 | |||
| 98 | auto* output_list = &buffer_a; | 109 | auto* output_list = &buffer_a; |
| 99 | auto* input_list = &buffer_b; | 110 | auto* input_list = &buffer_b; |
| 100 | 111 | ||
| @@ -105,23 +116,18 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu | |||
| 105 | static const float24 f0 = float24::FromFloat32(0.0); | 116 | static const float24 f0 = float24::FromFloat32(0.0); |
| 106 | static const float24 f1 = float24::FromFloat32(1.0); | 117 | static const float24 f1 = float24::FromFloat32(1.0); |
| 107 | static const std::array<ClippingEdge, 7> clipping_edges = {{ | 118 | static const std::array<ClippingEdge, 7> clipping_edges = {{ |
| 108 | {Math::MakeVec(f1, f0, f0, -f1)}, // x = +w | 119 | {Math::MakeVec(-f1, f0, f0, f1)}, // x = +w |
| 109 | {Math::MakeVec(-f1, f0, f0, -f1)}, // x = -w | 120 | {Math::MakeVec(f1, f0, f0, f1)}, // x = -w |
| 110 | {Math::MakeVec(f0, f1, f0, -f1)}, // y = +w | 121 | {Math::MakeVec(f0, -f1, f0, f1)}, // y = +w |
| 111 | {Math::MakeVec(f0, -f1, f0, -f1)}, // y = -w | 122 | {Math::MakeVec(f0, f1, f0, f1)}, // y = -w |
| 112 | {Math::MakeVec(f0, f0, f1, f0)}, // z = 0 | 123 | {Math::MakeVec(f0, f0, -f1, f0)}, // z = 0 |
| 113 | {Math::MakeVec(f0, f0, -f1, -f1)}, // z = -w | 124 | {Math::MakeVec(f0, f0, f1, f1)}, // z = -w |
| 114 | {Math::MakeVec(f0, f0, f0, -f1), Math::Vec4<float24>(f0, f0, f0, EPSILON)}, // w = EPSILON | 125 | {Math::MakeVec(f0, f0, f0, f1), Math::Vec4<float24>(f0, f0, f0, EPSILON)}, // w = EPSILON |
| 115 | }}; | 126 | }}; |
| 116 | 127 | ||
| 117 | // TODO: If one vertex lies outside one of the depth clipping planes, some platforms (e.g. Wii) | ||
| 118 | // drop the whole primitive instead of clipping the primitive properly. We should test if | ||
| 119 | // this happens on the 3DS, too. | ||
| 120 | |||
| 121 | // Simple implementation of the Sutherland-Hodgman clipping algorithm. | 128 | // Simple implementation of the Sutherland-Hodgman clipping algorithm. |
| 122 | // TODO: Make this less inefficient (currently lots of useless buffering overhead happens here) | 129 | // TODO: Make this less inefficient (currently lots of useless buffering overhead happens here) |
| 123 | for (auto edge : clipping_edges) { | 130 | auto Clip = [&](const ClippingEdge& edge) { |
| 124 | |||
| 125 | std::swap(input_list, output_list); | 131 | std::swap(input_list, output_list); |
| 126 | output_list->clear(); | 132 | output_list->clear(); |
| 127 | 133 | ||
| @@ -140,12 +146,24 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu | |||
| 140 | } | 146 | } |
| 141 | reference_vertex = &vertex; | 147 | reference_vertex = &vertex; |
| 142 | } | 148 | } |
| 149 | }; | ||
| 150 | |||
| 151 | for (auto edge : clipping_edges) { | ||
| 152 | Clip(edge); | ||
| 143 | 153 | ||
| 144 | // Need to have at least a full triangle to continue... | 154 | // Need to have at least a full triangle to continue... |
| 145 | if (output_list->size() < 3) | 155 | if (output_list->size() < 3) |
| 146 | return; | 156 | return; |
| 147 | } | 157 | } |
| 148 | 158 | ||
| 159 | if (g_state.regs.rasterizer.clip_enable) { | ||
| 160 | ClippingEdge custom_edge{g_state.regs.rasterizer.GetClipCoef()}; | ||
| 161 | Clip(custom_edge); | ||
| 162 | |||
| 163 | if (output_list->size() < 3) | ||
| 164 | return; | ||
| 165 | } | ||
| 166 | |||
| 149 | InitScreenCoordinates((*output_list)[0]); | 167 | InitScreenCoordinates((*output_list)[0]); |
| 150 | InitScreenCoordinates((*output_list)[1]); | 168 | InitScreenCoordinates((*output_list)[1]); |
| 151 | 169 | ||
diff --git a/src/video_core/swrasterizer/framebuffer.cpp b/src/video_core/swrasterizer/framebuffer.cpp index 7de3aac75..f34eab6cf 100644 --- a/src/video_core/swrasterizer/framebuffer.cpp +++ b/src/video_core/swrasterizer/framebuffer.cpp | |||
| @@ -352,6 +352,8 @@ u8 LogicOp(u8 src, u8 dest, FramebufferRegs::LogicOp op) { | |||
| 352 | case FramebufferRegs::LogicOp::OrInverted: | 352 | case FramebufferRegs::LogicOp::OrInverted: |
| 353 | return ~src | dest; | 353 | return ~src | dest; |
| 354 | } | 354 | } |
| 355 | |||
| 356 | UNREACHABLE(); | ||
| 355 | }; | 357 | }; |
| 356 | 358 | ||
| 357 | } // namespace Rasterizer | 359 | } // namespace Rasterizer |
diff --git a/src/video_core/swrasterizer/lighting.cpp b/src/video_core/swrasterizer/lighting.cpp new file mode 100644 index 000000000..5fa748611 --- /dev/null +++ b/src/video_core/swrasterizer/lighting.cpp | |||
| @@ -0,0 +1,308 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include "common/math_util.h" | ||
| 6 | #include "video_core/swrasterizer/lighting.h" | ||
| 7 | |||
| 8 | namespace Pica { | ||
| 9 | |||
| 10 | static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut_index, u8 index, | ||
| 11 | float delta) { | ||
| 12 | ASSERT_MSG(lut_index < lighting.luts.size(), "Out of range lut"); | ||
| 13 | ASSERT_MSG(index < lighting.luts[lut_index].size(), "Out of range index"); | ||
| 14 | |||
| 15 | const auto& lut = lighting.luts[lut_index][index]; | ||
| 16 | |||
| 17 | float lut_value = lut.ToFloat(); | ||
| 18 | float lut_diff = lut.DiffToFloat(); | ||
| 19 | |||
| 20 | return lut_value + lut_diff * delta; | ||
| 21 | } | ||
| 22 | |||
| 23 | std::tuple<Math::Vec4<u8>, Math::Vec4<u8>> ComputeFragmentsColors( | ||
| 24 | const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state, | ||
| 25 | const Math::Quaternion<float>& normquat, const Math::Vec3<float>& view, | ||
| 26 | const Math::Vec4<u8> (&texture_color)[4]) { | ||
| 27 | |||
| 28 | Math::Vec3<float> surface_normal; | ||
| 29 | Math::Vec3<float> surface_tangent; | ||
| 30 | |||
| 31 | if (lighting.config0.bump_mode != LightingRegs::LightingBumpMode::None) { | ||
| 32 | Math::Vec3<float> perturbation = | ||
| 33 | texture_color[lighting.config0.bump_selector].xyz().Cast<float>() / 127.5f - | ||
| 34 | Math::MakeVec(1.0f, 1.0f, 1.0f); | ||
| 35 | if (lighting.config0.bump_mode == LightingRegs::LightingBumpMode::NormalMap) { | ||
| 36 | if (!lighting.config0.disable_bump_renorm) { | ||
| 37 | const float z_square = 1 - perturbation.xy().Length2(); | ||
| 38 | perturbation.z = std::sqrt(std::max(z_square, 0.0f)); | ||
| 39 | } | ||
| 40 | surface_normal = perturbation; | ||
| 41 | surface_tangent = Math::MakeVec(1.0f, 0.0f, 0.0f); | ||
| 42 | } else if (lighting.config0.bump_mode == LightingRegs::LightingBumpMode::TangentMap) { | ||
| 43 | surface_normal = Math::MakeVec(0.0f, 0.0f, 1.0f); | ||
| 44 | surface_tangent = perturbation; | ||
| 45 | } else { | ||
| 46 | LOG_ERROR(HW_GPU, "Unknown bump mode %u", lighting.config0.bump_mode.Value()); | ||
| 47 | } | ||
| 48 | } else { | ||
| 49 | surface_normal = Math::MakeVec(0.0f, 0.0f, 1.0f); | ||
| 50 | surface_tangent = Math::MakeVec(1.0f, 0.0f, 0.0f); | ||
| 51 | } | ||
| 52 | |||
| 53 | // Use the normalized the quaternion when performing the rotation | ||
| 54 | auto normal = Math::QuaternionRotate(normquat, surface_normal); | ||
| 55 | auto tangent = Math::QuaternionRotate(normquat, surface_tangent); | ||
| 56 | |||
| 57 | Math::Vec4<float> diffuse_sum = {0.0f, 0.0f, 0.0f, 1.0f}; | ||
| 58 | Math::Vec4<float> specular_sum = {0.0f, 0.0f, 0.0f, 1.0f}; | ||
| 59 | |||
| 60 | for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { | ||
| 61 | unsigned num = lighting.light_enable.GetNum(light_index); | ||
| 62 | const auto& light_config = lighting.light[num]; | ||
| 63 | |||
| 64 | Math::Vec3<float> refl_value = {}; | ||
| 65 | Math::Vec3<float> position = {float16::FromRaw(light_config.x).ToFloat32(), | ||
| 66 | float16::FromRaw(light_config.y).ToFloat32(), | ||
| 67 | float16::FromRaw(light_config.z).ToFloat32()}; | ||
| 68 | Math::Vec3<float> light_vector; | ||
| 69 | |||
| 70 | if (light_config.config.directional) | ||
| 71 | light_vector = position; | ||
| 72 | else | ||
| 73 | light_vector = position + view; | ||
| 74 | |||
| 75 | light_vector.Normalize(); | ||
| 76 | |||
| 77 | Math::Vec3<float> norm_view = view.Normalized(); | ||
| 78 | Math::Vec3<float> half_vector = norm_view + light_vector; | ||
| 79 | |||
| 80 | float dist_atten = 1.0f; | ||
| 81 | if (!lighting.IsDistAttenDisabled(num)) { | ||
| 82 | auto distance = (-view - position).Length(); | ||
| 83 | float scale = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); | ||
| 84 | float bias = Pica::float20::FromRaw(light_config.dist_atten_bias).ToFloat32(); | ||
| 85 | size_t lut = | ||
| 86 | static_cast<size_t>(LightingRegs::LightingSampler::DistanceAttenuation) + num; | ||
| 87 | |||
| 88 | float sample_loc = MathUtil::Clamp(scale * distance + bias, 0.0f, 1.0f); | ||
| 89 | |||
| 90 | u8 lutindex = | ||
| 91 | static_cast<u8>(MathUtil::Clamp(std::floor(sample_loc * 256.0f), 0.0f, 255.0f)); | ||
| 92 | float delta = sample_loc * 256 - lutindex; | ||
| 93 | dist_atten = LookupLightingLut(lighting_state, lut, lutindex, delta); | ||
| 94 | } | ||
| 95 | |||
| 96 | auto GetLutValue = [&](LightingRegs::LightingLutInput input, bool abs, | ||
| 97 | LightingRegs::LightingScale scale_enum, | ||
| 98 | LightingRegs::LightingSampler sampler) { | ||
| 99 | float result = 0.0f; | ||
| 100 | |||
| 101 | switch (input) { | ||
| 102 | case LightingRegs::LightingLutInput::NH: | ||
| 103 | result = Math::Dot(normal, half_vector.Normalized()); | ||
| 104 | break; | ||
| 105 | |||
| 106 | case LightingRegs::LightingLutInput::VH: | ||
| 107 | result = Math::Dot(norm_view, half_vector.Normalized()); | ||
| 108 | break; | ||
| 109 | |||
| 110 | case LightingRegs::LightingLutInput::NV: | ||
| 111 | result = Math::Dot(normal, norm_view); | ||
| 112 | break; | ||
| 113 | |||
| 114 | case LightingRegs::LightingLutInput::LN: | ||
| 115 | result = Math::Dot(light_vector, normal); | ||
| 116 | break; | ||
| 117 | |||
| 118 | case LightingRegs::LightingLutInput::SP: { | ||
| 119 | Math::Vec3<s32> spot_dir{light_config.spot_x.Value(), light_config.spot_y.Value(), | ||
| 120 | light_config.spot_z.Value()}; | ||
| 121 | result = Math::Dot(light_vector, spot_dir.Cast<float>() / 2047.0f); | ||
| 122 | break; | ||
| 123 | } | ||
| 124 | case LightingRegs::LightingLutInput::CP: | ||
| 125 | if (lighting.config0.config == LightingRegs::LightingConfig::Config7) { | ||
| 126 | const Math::Vec3<float> norm_half_vector = half_vector.Normalized(); | ||
| 127 | const Math::Vec3<float> half_vector_proj = | ||
| 128 | norm_half_vector - normal * Math::Dot(normal, norm_half_vector); | ||
| 129 | result = Math::Dot(half_vector_proj, tangent); | ||
| 130 | } else { | ||
| 131 | result = 0.0f; | ||
| 132 | } | ||
| 133 | break; | ||
| 134 | default: | ||
| 135 | LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %u\n", static_cast<u32>(input)); | ||
| 136 | UNIMPLEMENTED(); | ||
| 137 | result = 0.0f; | ||
| 138 | } | ||
| 139 | |||
| 140 | u8 index; | ||
| 141 | float delta; | ||
| 142 | |||
| 143 | if (abs) { | ||
| 144 | if (light_config.config.two_sided_diffuse) | ||
| 145 | result = std::abs(result); | ||
| 146 | else | ||
| 147 | result = std::max(result, 0.0f); | ||
| 148 | |||
| 149 | float flr = std::floor(result * 256.0f); | ||
| 150 | index = static_cast<u8>(MathUtil::Clamp(flr, 0.0f, 255.0f)); | ||
| 151 | delta = result * 256 - index; | ||
| 152 | } else { | ||
| 153 | float flr = std::floor(result * 128.0f); | ||
| 154 | s8 signed_index = static_cast<s8>(MathUtil::Clamp(flr, -128.0f, 127.0f)); | ||
| 155 | delta = result * 128.0f - signed_index; | ||
| 156 | index = static_cast<u8>(signed_index); | ||
| 157 | } | ||
| 158 | |||
| 159 | float scale = lighting.lut_scale.GetScale(scale_enum); | ||
| 160 | return scale * | ||
| 161 | LookupLightingLut(lighting_state, static_cast<size_t>(sampler), index, delta); | ||
| 162 | }; | ||
| 163 | |||
| 164 | // If enabled, compute spot light attenuation value | ||
| 165 | float spot_atten = 1.0f; | ||
| 166 | if (!lighting.IsSpotAttenDisabled(num) && | ||
| 167 | LightingRegs::IsLightingSamplerSupported( | ||
| 168 | lighting.config0.config, LightingRegs::LightingSampler::SpotlightAttenuation)) { | ||
| 169 | auto lut = LightingRegs::SpotlightAttenuationSampler(num); | ||
| 170 | spot_atten = GetLutValue(lighting.lut_input.sp, lighting.abs_lut_input.disable_sp == 0, | ||
| 171 | lighting.lut_scale.sp, lut); | ||
| 172 | } | ||
| 173 | |||
| 174 | // Specular 0 component | ||
| 175 | float d0_lut_value = 1.0f; | ||
| 176 | if (lighting.config1.disable_lut_d0 == 0 && | ||
| 177 | LightingRegs::IsLightingSamplerSupported( | ||
| 178 | lighting.config0.config, LightingRegs::LightingSampler::Distribution0)) { | ||
| 179 | d0_lut_value = | ||
| 180 | GetLutValue(lighting.lut_input.d0, lighting.abs_lut_input.disable_d0 == 0, | ||
| 181 | lighting.lut_scale.d0, LightingRegs::LightingSampler::Distribution0); | ||
| 182 | } | ||
| 183 | |||
| 184 | Math::Vec3<float> specular_0 = d0_lut_value * light_config.specular_0.ToVec3f(); | ||
| 185 | |||
| 186 | // If enabled, lookup ReflectRed value, otherwise, 1.0 is used | ||
| 187 | if (lighting.config1.disable_lut_rr == 0 && | ||
| 188 | LightingRegs::IsLightingSamplerSupported(lighting.config0.config, | ||
| 189 | LightingRegs::LightingSampler::ReflectRed)) { | ||
| 190 | refl_value.x = | ||
| 191 | GetLutValue(lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0, | ||
| 192 | lighting.lut_scale.rr, LightingRegs::LightingSampler::ReflectRed); | ||
| 193 | } else { | ||
| 194 | refl_value.x = 1.0f; | ||
| 195 | } | ||
| 196 | |||
| 197 | // If enabled, lookup ReflectGreen value, otherwise, ReflectRed value is used | ||
| 198 | if (lighting.config1.disable_lut_rg == 0 && | ||
| 199 | LightingRegs::IsLightingSamplerSupported(lighting.config0.config, | ||
| 200 | LightingRegs::LightingSampler::ReflectGreen)) { | ||
| 201 | refl_value.y = | ||
| 202 | GetLutValue(lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0, | ||
| 203 | lighting.lut_scale.rg, LightingRegs::LightingSampler::ReflectGreen); | ||
| 204 | } else { | ||
| 205 | refl_value.y = refl_value.x; | ||
| 206 | } | ||
| 207 | |||
| 208 | // If enabled, lookup ReflectBlue value, otherwise, ReflectRed value is used | ||
| 209 | if (lighting.config1.disable_lut_rb == 0 && | ||
| 210 | LightingRegs::IsLightingSamplerSupported(lighting.config0.config, | ||
| 211 | LightingRegs::LightingSampler::ReflectBlue)) { | ||
| 212 | refl_value.z = | ||
| 213 | GetLutValue(lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0, | ||
| 214 | lighting.lut_scale.rb, LightingRegs::LightingSampler::ReflectBlue); | ||
| 215 | } else { | ||
| 216 | refl_value.z = refl_value.x; | ||
| 217 | } | ||
| 218 | |||
| 219 | // Specular 1 component | ||
| 220 | float d1_lut_value = 1.0f; | ||
| 221 | if (lighting.config1.disable_lut_d1 == 0 && | ||
| 222 | LightingRegs::IsLightingSamplerSupported( | ||
| 223 | lighting.config0.config, LightingRegs::LightingSampler::Distribution1)) { | ||
| 224 | d1_lut_value = | ||
| 225 | GetLutValue(lighting.lut_input.d1, lighting.abs_lut_input.disable_d1 == 0, | ||
| 226 | lighting.lut_scale.d1, LightingRegs::LightingSampler::Distribution1); | ||
| 227 | } | ||
| 228 | |||
| 229 | Math::Vec3<float> specular_1 = | ||
| 230 | d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); | ||
| 231 | |||
| 232 | // Fresnel | ||
| 233 | // Note: only the last entry in the light slots applies the Fresnel factor | ||
| 234 | if (light_index == lighting.max_light_index && lighting.config1.disable_lut_fr == 0 && | ||
| 235 | LightingRegs::IsLightingSamplerSupported(lighting.config0.config, | ||
| 236 | LightingRegs::LightingSampler::Fresnel)) { | ||
| 237 | |||
| 238 | float lut_value = | ||
| 239 | GetLutValue(lighting.lut_input.fr, lighting.abs_lut_input.disable_fr == 0, | ||
| 240 | lighting.lut_scale.fr, LightingRegs::LightingSampler::Fresnel); | ||
| 241 | |||
| 242 | // Enabled for diffuse lighting alpha component | ||
| 243 | if (lighting.config0.fresnel_selector == | ||
| 244 | LightingRegs::LightingFresnelSelector::PrimaryAlpha || | ||
| 245 | lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { | ||
| 246 | diffuse_sum.a() = lut_value; | ||
| 247 | } | ||
| 248 | |||
| 249 | // Enabled for the specular lighting alpha component | ||
| 250 | if (lighting.config0.fresnel_selector == | ||
| 251 | LightingRegs::LightingFresnelSelector::SecondaryAlpha || | ||
| 252 | lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { | ||
| 253 | specular_sum.a() = lut_value; | ||
| 254 | } | ||
| 255 | } | ||
| 256 | |||
| 257 | auto dot_product = Math::Dot(light_vector, normal); | ||
| 258 | |||
| 259 | // Calculate clamp highlights before applying the two-sided diffuse configuration to the dot | ||
| 260 | // product. | ||
| 261 | float clamp_highlights = 1.0f; | ||
| 262 | if (lighting.config0.clamp_highlights) { | ||
| 263 | if (dot_product <= 0.0f) | ||
| 264 | clamp_highlights = 0.0f; | ||
| 265 | else | ||
| 266 | clamp_highlights = 1.0f; | ||
| 267 | } | ||
| 268 | |||
| 269 | if (light_config.config.two_sided_diffuse) | ||
| 270 | dot_product = std::abs(dot_product); | ||
| 271 | else | ||
| 272 | dot_product = std::max(dot_product, 0.0f); | ||
| 273 | |||
| 274 | if (light_config.config.geometric_factor_0 || light_config.config.geometric_factor_1) { | ||
| 275 | float geo_factor = half_vector.Length2(); | ||
| 276 | geo_factor = geo_factor == 0.0f ? 0.0f : std::min(dot_product / geo_factor, 1.0f); | ||
| 277 | if (light_config.config.geometric_factor_0) { | ||
| 278 | specular_0 *= geo_factor; | ||
| 279 | } | ||
| 280 | if (light_config.config.geometric_factor_1) { | ||
| 281 | specular_1 *= geo_factor; | ||
| 282 | } | ||
| 283 | } | ||
| 284 | |||
| 285 | auto diffuse = | ||
| 286 | light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); | ||
| 287 | diffuse_sum += Math::MakeVec(diffuse * dist_atten * spot_atten, 0.0f); | ||
| 288 | |||
| 289 | specular_sum += Math::MakeVec( | ||
| 290 | (specular_0 + specular_1) * clamp_highlights * dist_atten * spot_atten, 0.0f); | ||
| 291 | } | ||
| 292 | |||
| 293 | diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f); | ||
| 294 | |||
| 295 | auto diffuse = Math::MakeVec<float>(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, | ||
| 296 | MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, | ||
| 297 | MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, | ||
| 298 | MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255) | ||
| 299 | .Cast<u8>(); | ||
| 300 | auto specular = Math::MakeVec<float>(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, | ||
| 301 | MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, | ||
| 302 | MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, | ||
| 303 | MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255) | ||
| 304 | .Cast<u8>(); | ||
| 305 | return std::make_tuple(diffuse, specular); | ||
| 306 | } | ||
| 307 | |||
| 308 | } // namespace Pica | ||
diff --git a/src/video_core/swrasterizer/lighting.h b/src/video_core/swrasterizer/lighting.h new file mode 100644 index 000000000..d807a3d94 --- /dev/null +++ b/src/video_core/swrasterizer/lighting.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <tuple> | ||
| 8 | #include "common/quaternion.h" | ||
| 9 | #include "common/vector_math.h" | ||
| 10 | #include "video_core/pica_state.h" | ||
| 11 | |||
| 12 | namespace Pica { | ||
| 13 | |||
| 14 | std::tuple<Math::Vec4<u8>, Math::Vec4<u8>> ComputeFragmentsColors( | ||
| 15 | const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state, | ||
| 16 | const Math::Quaternion<float>& normquat, const Math::Vec3<float>& view, | ||
| 17 | const Math::Vec4<u8> (&texture_color)[4]); | ||
| 18 | |||
| 19 | } // namespace Pica | ||
diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 512e81c08..862135614 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp | |||
| @@ -13,6 +13,7 @@ | |||
| 13 | #include "common/logging/log.h" | 13 | #include "common/logging/log.h" |
| 14 | #include "common/math_util.h" | 14 | #include "common/math_util.h" |
| 15 | #include "common/microprofile.h" | 15 | #include "common/microprofile.h" |
| 16 | #include "common/quaternion.h" | ||
| 16 | #include "common/vector_math.h" | 17 | #include "common/vector_math.h" |
| 17 | #include "core/hw/gpu.h" | 18 | #include "core/hw/gpu.h" |
| 18 | #include "core/memory.h" | 19 | #include "core/memory.h" |
| @@ -24,6 +25,7 @@ | |||
| 24 | #include "video_core/regs_texturing.h" | 25 | #include "video_core/regs_texturing.h" |
| 25 | #include "video_core/shader/shader.h" | 26 | #include "video_core/shader/shader.h" |
| 26 | #include "video_core/swrasterizer/framebuffer.h" | 27 | #include "video_core/swrasterizer/framebuffer.h" |
| 28 | #include "video_core/swrasterizer/lighting.h" | ||
| 27 | #include "video_core/swrasterizer/proctex.h" | 29 | #include "video_core/swrasterizer/proctex.h" |
| 28 | #include "video_core/swrasterizer/rasterizer.h" | 30 | #include "video_core/swrasterizer/rasterizer.h" |
| 29 | #include "video_core/swrasterizer/texturing.h" | 31 | #include "video_core/swrasterizer/texturing.h" |
| @@ -419,6 +421,26 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve | |||
| 419 | regs.texturing.tev_combiner_buffer_color.a, | 421 | regs.texturing.tev_combiner_buffer_color.a, |
| 420 | }; | 422 | }; |
| 421 | 423 | ||
| 424 | Math::Vec4<u8> primary_fragment_color = {0, 0, 0, 0}; | ||
| 425 | Math::Vec4<u8> secondary_fragment_color = {0, 0, 0, 0}; | ||
| 426 | |||
| 427 | if (!g_state.regs.lighting.disable) { | ||
| 428 | Math::Quaternion<float> normquat = Math::Quaternion<float>{ | ||
| 429 | {GetInterpolatedAttribute(v0.quat.x, v1.quat.x, v2.quat.x).ToFloat32(), | ||
| 430 | GetInterpolatedAttribute(v0.quat.y, v1.quat.y, v2.quat.y).ToFloat32(), | ||
| 431 | GetInterpolatedAttribute(v0.quat.z, v1.quat.z, v2.quat.z).ToFloat32()}, | ||
| 432 | GetInterpolatedAttribute(v0.quat.w, v1.quat.w, v2.quat.w).ToFloat32(), | ||
| 433 | }.Normalized(); | ||
| 434 | |||
| 435 | Math::Vec3<float> view{ | ||
| 436 | GetInterpolatedAttribute(v0.view.x, v1.view.x, v2.view.x).ToFloat32(), | ||
| 437 | GetInterpolatedAttribute(v0.view.y, v1.view.y, v2.view.y).ToFloat32(), | ||
| 438 | GetInterpolatedAttribute(v0.view.z, v1.view.z, v2.view.z).ToFloat32(), | ||
| 439 | }; | ||
| 440 | std::tie(primary_fragment_color, secondary_fragment_color) = ComputeFragmentsColors( | ||
| 441 | g_state.regs.lighting, g_state.lighting, normquat, view, texture_color); | ||
| 442 | } | ||
| 443 | |||
| 422 | for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); | 444 | for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); |
| 423 | ++tev_stage_index) { | 445 | ++tev_stage_index) { |
| 424 | const auto& tev_stage = tev_stages[tev_stage_index]; | 446 | const auto& tev_stage = tev_stages[tev_stage_index]; |
| @@ -427,14 +449,13 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve | |||
| 427 | auto GetSource = [&](Source source) -> Math::Vec4<u8> { | 449 | auto GetSource = [&](Source source) -> Math::Vec4<u8> { |
| 428 | switch (source) { | 450 | switch (source) { |
| 429 | case Source::PrimaryColor: | 451 | case Source::PrimaryColor: |
| 452 | return primary_color; | ||
| 430 | 453 | ||
| 431 | // HACK: Until we implement fragment lighting, use primary_color | ||
| 432 | case Source::PrimaryFragmentColor: | 454 | case Source::PrimaryFragmentColor: |
| 433 | return primary_color; | 455 | return primary_fragment_color; |
| 434 | 456 | ||
| 435 | // HACK: Until we implement fragment lighting, use zero | ||
| 436 | case Source::SecondaryFragmentColor: | 457 | case Source::SecondaryFragmentColor: |
| 437 | return {0, 0, 0, 0}; | 458 | return secondary_fragment_color; |
| 438 | 459 | ||
| 439 | case Source::Texture0: | 460 | case Source::Texture0: |
| 440 | return texture_color[0]; | 461 | return texture_color[0]; |
diff --git a/src/video_core/swrasterizer/rasterizer.h b/src/video_core/swrasterizer/rasterizer.h index 2f0877581..66cd6cfd4 100644 --- a/src/video_core/swrasterizer/rasterizer.h +++ b/src/video_core/swrasterizer/rasterizer.h | |||
| @@ -19,10 +19,9 @@ struct Vertex : Shader::OutputVertex { | |||
| 19 | 19 | ||
| 20 | // Linear interpolation | 20 | // Linear interpolation |
| 21 | // factor: 0=this, 1=vtx | 21 | // factor: 0=this, 1=vtx |
| 22 | // Note: This function cannot be called after perspective divide | ||
| 22 | void Lerp(float24 factor, const Vertex& vtx) { | 23 | void Lerp(float24 factor, const Vertex& vtx) { |
| 23 | pos = pos * factor + vtx.pos * (float24::FromFloat32(1) - factor); | 24 | pos = pos * factor + vtx.pos * (float24::FromFloat32(1) - factor); |
| 24 | |||
| 25 | // TODO: Should perform perspective correct interpolation here... | ||
| 26 | quat = quat * factor + vtx.quat * (float24::FromFloat32(1) - factor); | 25 | quat = quat * factor + vtx.quat * (float24::FromFloat32(1) - factor); |
| 27 | color = color * factor + vtx.color * (float24::FromFloat32(1) - factor); | 26 | color = color * factor + vtx.color * (float24::FromFloat32(1) - factor); |
| 28 | tc0 = tc0 * factor + vtx.tc0 * (float24::FromFloat32(1) - factor); | 27 | tc0 = tc0 * factor + vtx.tc0 * (float24::FromFloat32(1) - factor); |
| @@ -30,12 +29,11 @@ struct Vertex : Shader::OutputVertex { | |||
| 30 | tc0_w = tc0_w * factor + vtx.tc0_w * (float24::FromFloat32(1) - factor); | 29 | tc0_w = tc0_w * factor + vtx.tc0_w * (float24::FromFloat32(1) - factor); |
| 31 | view = view * factor + vtx.view * (float24::FromFloat32(1) - factor); | 30 | view = view * factor + vtx.view * (float24::FromFloat32(1) - factor); |
| 32 | tc2 = tc2 * factor + vtx.tc2 * (float24::FromFloat32(1) - factor); | 31 | tc2 = tc2 * factor + vtx.tc2 * (float24::FromFloat32(1) - factor); |
| 33 | |||
| 34 | screenpos = screenpos * factor + vtx.screenpos * (float24::FromFloat32(1) - factor); | ||
| 35 | } | 32 | } |
| 36 | 33 | ||
| 37 | // Linear interpolation | 34 | // Linear interpolation |
| 38 | // factor: 0=v0, 1=v1 | 35 | // factor: 0=v0, 1=v1 |
| 36 | // Note: This function cannot be called after perspective divide | ||
| 39 | static Vertex Lerp(float24 factor, const Vertex& v0, const Vertex& v1) { | 37 | static Vertex Lerp(float24 factor, const Vertex& v0, const Vertex& v1) { |
| 40 | Vertex ret = v0; | 38 | Vertex ret = v0; |
| 41 | ret.Lerp(factor, v1); | 39 | ret.Lerp(factor, v1); |
diff --git a/src/video_core/swrasterizer/texturing.cpp b/src/video_core/swrasterizer/texturing.cpp index 4f02b93f2..79b1ce841 100644 --- a/src/video_core/swrasterizer/texturing.cpp +++ b/src/video_core/swrasterizer/texturing.cpp | |||
| @@ -89,6 +89,8 @@ Math::Vec3<u8> GetColorModifier(TevStageConfig::ColorModifier factor, | |||
| 89 | case ColorModifier::OneMinusSourceBlue: | 89 | case ColorModifier::OneMinusSourceBlue: |
| 90 | return (Math::Vec3<u8>(255, 255, 255) - values.bbb()).Cast<u8>(); | 90 | return (Math::Vec3<u8>(255, 255, 255) - values.bbb()).Cast<u8>(); |
| 91 | } | 91 | } |
| 92 | |||
| 93 | UNREACHABLE(); | ||
| 92 | }; | 94 | }; |
| 93 | 95 | ||
| 94 | u8 GetAlphaModifier(TevStageConfig::AlphaModifier factor, const Math::Vec4<u8>& values) { | 96 | u8 GetAlphaModifier(TevStageConfig::AlphaModifier factor, const Math::Vec4<u8>& values) { |
| @@ -119,6 +121,8 @@ u8 GetAlphaModifier(TevStageConfig::AlphaModifier factor, const Math::Vec4<u8>& | |||
| 119 | case AlphaModifier::OneMinusSourceBlue: | 121 | case AlphaModifier::OneMinusSourceBlue: |
| 120 | return 255 - values.b(); | 122 | return 255 - values.b(); |
| 121 | } | 123 | } |
| 124 | |||
| 125 | UNREACHABLE(); | ||
| 122 | }; | 126 | }; |
| 123 | 127 | ||
| 124 | Math::Vec3<u8> ColorCombine(TevStageConfig::Operation op, const Math::Vec3<u8> input[3]) { | 128 | Math::Vec3<u8> ColorCombine(TevStageConfig::Operation op, const Math::Vec3<u8> input[3]) { |
diff --git a/src/video_core/utils.h b/src/video_core/utils.h index 7ce83a055..d8567f314 100644 --- a/src/video_core/utils.h +++ b/src/video_core/utils.h | |||
| @@ -8,17 +8,11 @@ | |||
| 8 | 8 | ||
| 9 | namespace VideoCore { | 9 | namespace VideoCore { |
| 10 | 10 | ||
| 11 | /** | 11 | // 8x8 Z-Order coordinate from 2D coordinates |
| 12 | * Interleave the lower 3 bits of each coordinate to get the intra-block offsets, which are | ||
| 13 | * arranged in a Z-order curve. More details on the bit manipulation at: | ||
| 14 | * https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/ | ||
| 15 | */ | ||
| 16 | static inline u32 MortonInterleave(u32 x, u32 y) { | 12 | static inline u32 MortonInterleave(u32 x, u32 y) { |
| 17 | u32 i = (x & 7) | ((y & 7) << 8); // ---- -210 | 13 | static const u32 xlut[] = {0x00, 0x01, 0x04, 0x05, 0x10, 0x11, 0x14, 0x15}; |
| 18 | i = (i ^ (i << 2)) & 0x1313; // ---2 --10 | 14 | static const u32 ylut[] = {0x00, 0x02, 0x08, 0x0a, 0x20, 0x22, 0x28, 0x2a}; |
| 19 | i = (i ^ (i << 1)) & 0x1515; // ---2 -1-0 | 15 | return xlut[x % 8] + ylut[y % 8]; |
| 20 | i = (i | (i >> 7)) & 0x3F; | ||
| 21 | return i; | ||
| 22 | } | 16 | } |
| 23 | 17 | ||
| 24 | /** | 18 | /** |
diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt index 334d82a8a..c93811892 100644 --- a/src/web_service/CMakeLists.txt +++ b/src/web_service/CMakeLists.txt | |||
| @@ -1,10 +1,12 @@ | |||
| 1 | set(SRCS | 1 | set(SRCS |
| 2 | telemetry_json.cpp | 2 | telemetry_json.cpp |
| 3 | verify_login.cpp | ||
| 3 | web_backend.cpp | 4 | web_backend.cpp |
| 4 | ) | 5 | ) |
| 5 | 6 | ||
| 6 | set(HEADERS | 7 | set(HEADERS |
| 7 | telemetry_json.h | 8 | telemetry_json.h |
| 9 | verify_login.h | ||
| 8 | web_backend.h | 10 | web_backend.h |
| 9 | ) | 11 | ) |
| 10 | 12 | ||
diff --git a/src/web_service/telemetry_json.cpp b/src/web_service/telemetry_json.cpp index a2d007e77..6ad2ffcd4 100644 --- a/src/web_service/telemetry_json.cpp +++ b/src/web_service/telemetry_json.cpp | |||
| @@ -3,7 +3,6 @@ | |||
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #include "common/assert.h" | 5 | #include "common/assert.h" |
| 6 | #include "core/settings.h" | ||
| 7 | #include "web_service/telemetry_json.h" | 6 | #include "web_service/telemetry_json.h" |
| 8 | #include "web_service/web_backend.h" | 7 | #include "web_service/web_backend.h" |
| 9 | 8 | ||
| @@ -81,7 +80,7 @@ void TelemetryJson::Complete() { | |||
| 81 | SerializeSection(Telemetry::FieldType::UserFeedback, "UserFeedback"); | 80 | SerializeSection(Telemetry::FieldType::UserFeedback, "UserFeedback"); |
| 82 | SerializeSection(Telemetry::FieldType::UserConfig, "UserConfig"); | 81 | SerializeSection(Telemetry::FieldType::UserConfig, "UserConfig"); |
| 83 | SerializeSection(Telemetry::FieldType::UserSystem, "UserSystem"); | 82 | SerializeSection(Telemetry::FieldType::UserSystem, "UserSystem"); |
| 84 | PostJson(Settings::values.telemetry_endpoint_url, TopSection().dump()); | 83 | PostJson(endpoint_url, TopSection().dump(), true, username, token); |
| 85 | } | 84 | } |
| 86 | 85 | ||
| 87 | } // namespace WebService | 86 | } // namespace WebService |
diff --git a/src/web_service/telemetry_json.h b/src/web_service/telemetry_json.h index 39038b4f9..9e78c6803 100644 --- a/src/web_service/telemetry_json.h +++ b/src/web_service/telemetry_json.h | |||
| @@ -17,7 +17,9 @@ namespace WebService { | |||
| 17 | */ | 17 | */ |
| 18 | class TelemetryJson : public Telemetry::VisitorInterface { | 18 | class TelemetryJson : public Telemetry::VisitorInterface { |
| 19 | public: | 19 | public: |
| 20 | TelemetryJson() = default; | 20 | TelemetryJson(const std::string& endpoint_url, const std::string& username, |
| 21 | const std::string& token) | ||
| 22 | : endpoint_url(endpoint_url), username(username), token(token) {} | ||
| 21 | ~TelemetryJson() = default; | 23 | ~TelemetryJson() = default; |
| 22 | 24 | ||
| 23 | void Visit(const Telemetry::Field<bool>& field) override; | 25 | void Visit(const Telemetry::Field<bool>& field) override; |
| @@ -49,6 +51,9 @@ private: | |||
| 49 | 51 | ||
| 50 | nlohmann::json output; | 52 | nlohmann::json output; |
| 51 | std::array<nlohmann::json, 7> sections; | 53 | std::array<nlohmann::json, 7> sections; |
| 54 | std::string endpoint_url; | ||
| 55 | std::string username; | ||
| 56 | std::string token; | ||
| 52 | }; | 57 | }; |
| 53 | 58 | ||
| 54 | } // namespace WebService | 59 | } // namespace WebService |
diff --git a/src/web_service/verify_login.cpp b/src/web_service/verify_login.cpp new file mode 100644 index 000000000..1bc3b5afe --- /dev/null +++ b/src/web_service/verify_login.cpp | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #include <json.hpp> | ||
| 6 | #include "web_service/verify_login.h" | ||
| 7 | #include "web_service/web_backend.h" | ||
| 8 | |||
| 9 | namespace WebService { | ||
| 10 | |||
| 11 | std::future<bool> VerifyLogin(std::string& username, std::string& token, | ||
| 12 | const std::string& endpoint_url, std::function<void()> func) { | ||
| 13 | auto get_func = [func, username](const std::string& reply) -> bool { | ||
| 14 | func(); | ||
| 15 | if (reply.empty()) | ||
| 16 | return false; | ||
| 17 | nlohmann::json json = nlohmann::json::parse(reply); | ||
| 18 | std::string result; | ||
| 19 | try { | ||
| 20 | result = json["username"]; | ||
| 21 | } catch (const nlohmann::detail::out_of_range&) { | ||
| 22 | } | ||
| 23 | return result == username; | ||
| 24 | }; | ||
| 25 | return GetJson<bool>(get_func, endpoint_url, false, username, token); | ||
| 26 | } | ||
| 27 | |||
| 28 | } // namespace WebService | ||
diff --git a/src/web_service/verify_login.h b/src/web_service/verify_login.h new file mode 100644 index 000000000..303f5dbbc --- /dev/null +++ b/src/web_service/verify_login.h | |||
| @@ -0,0 +1,24 @@ | |||
| 1 | // Copyright 2017 Citra Emulator Project | ||
| 2 | // Licensed under GPLv2 or any later version | ||
| 3 | // Refer to the license.txt file included. | ||
| 4 | |||
| 5 | #pragma once | ||
| 6 | |||
| 7 | #include <functional> | ||
| 8 | #include <future> | ||
| 9 | #include <string> | ||
| 10 | |||
| 11 | namespace WebService { | ||
| 12 | |||
| 13 | /** | ||
| 14 | * Checks if username and token is valid | ||
| 15 | * @param username Citra username to use for authentication. | ||
| 16 | * @param token Citra token to use for authentication. | ||
| 17 | * @param endpoint_url URL of the services.citra-emu.org endpoint. | ||
| 18 | * @param func A function that gets exectued when the verification is finished | ||
| 19 | * @returns Future with bool indicating whether the verification succeeded | ||
| 20 | */ | ||
| 21 | std::future<bool> VerifyLogin(std::string& username, std::string& token, | ||
| 22 | const std::string& endpoint_url, std::function<void()> func); | ||
| 23 | |||
| 24 | } // namespace WebService | ||
diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp index 13e4555ac..b17d82f9c 100644 --- a/src/web_service/web_backend.cpp +++ b/src/web_service/web_backend.cpp | |||
| @@ -2,51 +2,139 @@ | |||
| 2 | // Licensed under GPLv2 or any later version | 2 | // Licensed under GPLv2 or any later version |
| 3 | // Refer to the license.txt file included. | 3 | // Refer to the license.txt file included. |
| 4 | 4 | ||
| 5 | #ifdef _WIN32 | ||
| 6 | #include <winsock.h> | ||
| 7 | #endif | ||
| 8 | |||
| 9 | #include <cstdlib> | ||
| 10 | #include <thread> | ||
| 5 | #include <cpr/cpr.h> | 11 | #include <cpr/cpr.h> |
| 6 | #include <stdlib.h> | ||
| 7 | #include "common/logging/log.h" | 12 | #include "common/logging/log.h" |
| 8 | #include "web_service/web_backend.h" | 13 | #include "web_service/web_backend.h" |
| 9 | 14 | ||
| 10 | namespace WebService { | 15 | namespace WebService { |
| 11 | 16 | ||
| 12 | static constexpr char API_VERSION[]{"1"}; | 17 | static constexpr char API_VERSION[]{"1"}; |
| 13 | static constexpr char ENV_VAR_USERNAME[]{"CITRA_WEB_SERVICES_USERNAME"}; | ||
| 14 | static constexpr char ENV_VAR_TOKEN[]{"CITRA_WEB_SERVICES_TOKEN"}; | ||
| 15 | 18 | ||
| 16 | static std::string GetEnvironmentVariable(const char* name) { | 19 | static std::unique_ptr<cpr::Session> g_session; |
| 17 | const char* value{getenv(name)}; | 20 | |
| 18 | if (value) { | 21 | void Win32WSAStartup() { |
| 19 | return value; | 22 | #ifdef _WIN32 |
| 23 | // On Windows, CPR/libcurl does not properly initialize Winsock. The below code is used to | ||
| 24 | // initialize Winsock globally, which fixes this problem. Without this, only the first CPR | ||
| 25 | // session will properly be created, and subsequent ones will fail. | ||
| 26 | WSADATA wsa_data; | ||
| 27 | const int wsa_result{WSAStartup(MAKEWORD(2, 2), &wsa_data)}; | ||
| 28 | if (wsa_result) { | ||
| 29 | LOG_CRITICAL(WebService, "WSAStartup failed: %d", wsa_result); | ||
| 20 | } | 30 | } |
| 21 | return {}; | 31 | #endif |
| 22 | } | 32 | } |
| 23 | 33 | ||
| 24 | const std::string& GetUsername() { | 34 | void PostJson(const std::string& url, const std::string& data, bool allow_anonymous, |
| 25 | static const std::string username{GetEnvironmentVariable(ENV_VAR_USERNAME)}; | 35 | const std::string& username, const std::string& token) { |
| 26 | return username; | 36 | if (url.empty()) { |
| 27 | } | 37 | LOG_ERROR(WebService, "URL is invalid"); |
| 38 | return; | ||
| 39 | } | ||
| 40 | |||
| 41 | const bool are_credentials_provided{!token.empty() && !username.empty()}; | ||
| 42 | if (!allow_anonymous && !are_credentials_provided) { | ||
| 43 | LOG_ERROR(WebService, "Credentials must be provided for authenticated requests"); | ||
| 44 | return; | ||
| 45 | } | ||
| 28 | 46 | ||
| 29 | const std::string& GetToken() { | 47 | Win32WSAStartup(); |
| 30 | static const std::string token{GetEnvironmentVariable(ENV_VAR_TOKEN)}; | 48 | |
| 31 | return token; | 49 | // Built request header |
| 50 | cpr::Header header; | ||
| 51 | if (are_credentials_provided) { | ||
| 52 | // Authenticated request if credentials are provided | ||
| 53 | header = {{"Content-Type", "application/json"}, | ||
| 54 | {"x-username", username.c_str()}, | ||
| 55 | {"x-token", token.c_str()}, | ||
| 56 | {"api-version", API_VERSION}}; | ||
| 57 | } else { | ||
| 58 | // Otherwise, anonymous request | ||
| 59 | header = cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}; | ||
| 60 | } | ||
| 61 | |||
| 62 | // Post JSON asynchronously | ||
| 63 | static std::future<void> future; | ||
| 64 | future = cpr::PostCallback( | ||
| 65 | [](cpr::Response r) { | ||
| 66 | if (r.error) { | ||
| 67 | LOG_ERROR(WebService, "POST returned cpr error: %u:%s", | ||
| 68 | static_cast<u32>(r.error.code), r.error.message.c_str()); | ||
| 69 | return; | ||
| 70 | } | ||
| 71 | if (r.status_code >= 400) { | ||
| 72 | LOG_ERROR(WebService, "POST returned error status code: %u", r.status_code); | ||
| 73 | return; | ||
| 74 | } | ||
| 75 | if (r.header["content-type"].find("application/json") == std::string::npos) { | ||
| 76 | LOG_ERROR(WebService, "POST returned wrong content: %s", | ||
| 77 | r.header["content-type"].c_str()); | ||
| 78 | return; | ||
| 79 | } | ||
| 80 | }, | ||
| 81 | cpr::Url{url}, cpr::Body{data}, header); | ||
| 32 | } | 82 | } |
| 33 | 83 | ||
| 34 | void PostJson(const std::string& url, const std::string& data) { | 84 | template <typename T> |
| 85 | std::future<T> GetJson(std::function<T(const std::string&)> func, const std::string& url, | ||
| 86 | bool allow_anonymous, const std::string& username, | ||
| 87 | const std::string& token) { | ||
| 35 | if (url.empty()) { | 88 | if (url.empty()) { |
| 36 | LOG_ERROR(WebService, "URL is invalid"); | 89 | LOG_ERROR(WebService, "URL is invalid"); |
| 37 | return; | 90 | return std::async(std::launch::async, [func{std::move(func)}]() { return func(""); }); |
| 38 | } | 91 | } |
| 39 | 92 | ||
| 40 | if (GetUsername().empty() || GetToken().empty()) { | 93 | const bool are_credentials_provided{!token.empty() && !username.empty()}; |
| 41 | LOG_ERROR(WebService, "Environment variables %s and %s must be set to POST JSON", | 94 | if (!allow_anonymous && !are_credentials_provided) { |
| 42 | ENV_VAR_USERNAME, ENV_VAR_TOKEN); | 95 | LOG_ERROR(WebService, "Credentials must be provided for authenticated requests"); |
| 43 | return; | 96 | return std::async(std::launch::async, [func{std::move(func)}]() { return func(""); }); |
| 44 | } | 97 | } |
| 45 | 98 | ||
| 46 | cpr::PostAsync(cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"}, | 99 | Win32WSAStartup(); |
| 47 | {"x-username", GetUsername()}, | 100 | |
| 48 | {"x-token", GetToken()}, | 101 | // Built request header |
| 49 | {"api-version", API_VERSION}}); | 102 | cpr::Header header; |
| 103 | if (are_credentials_provided) { | ||
| 104 | // Authenticated request if credentials are provided | ||
| 105 | header = {{"Content-Type", "application/json"}, | ||
| 106 | {"x-username", username.c_str()}, | ||
| 107 | {"x-token", token.c_str()}, | ||
| 108 | {"api-version", API_VERSION}}; | ||
| 109 | } else { | ||
| 110 | // Otherwise, anonymous request | ||
| 111 | header = cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}; | ||
| 112 | } | ||
| 113 | |||
| 114 | // Get JSON asynchronously | ||
| 115 | return cpr::GetCallback( | ||
| 116 | [func{std::move(func)}](cpr::Response r) { | ||
| 117 | if (r.error) { | ||
| 118 | LOG_ERROR(WebService, "GET returned cpr error: %u:%s", | ||
| 119 | static_cast<u32>(r.error.code), r.error.message.c_str()); | ||
| 120 | return func(""); | ||
| 121 | } | ||
| 122 | if (r.status_code >= 400) { | ||
| 123 | LOG_ERROR(WebService, "GET returned error code: %u", r.status_code); | ||
| 124 | return func(""); | ||
| 125 | } | ||
| 126 | if (r.header["content-type"].find("application/json") == std::string::npos) { | ||
| 127 | LOG_ERROR(WebService, "GET returned wrong content: %s", | ||
| 128 | r.header["content-type"].c_str()); | ||
| 129 | return func(""); | ||
| 130 | } | ||
| 131 | return func(r.text); | ||
| 132 | }, | ||
| 133 | cpr::Url{url}, header); | ||
| 50 | } | 134 | } |
| 51 | 135 | ||
| 136 | template std::future<bool> GetJson(std::function<bool(const std::string&)> func, | ||
| 137 | const std::string& url, bool allow_anonymous, | ||
| 138 | const std::string& username, const std::string& token); | ||
| 139 | |||
| 52 | } // namespace WebService | 140 | } // namespace WebService |
diff --git a/src/web_service/web_backend.h b/src/web_service/web_backend.h index 2753d3b68..a63c75d13 100644 --- a/src/web_service/web_backend.h +++ b/src/web_service/web_backend.h | |||
| @@ -4,28 +4,36 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <functional> | ||
| 8 | #include <future> | ||
| 7 | #include <string> | 9 | #include <string> |
| 8 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 9 | 11 | ||
| 10 | namespace WebService { | 12 | namespace WebService { |
| 11 | 13 | ||
| 12 | /** | 14 | /** |
| 13 | * Gets the current username for accessing services.citra-emu.org. | 15 | * Posts JSON to services.citra-emu.org. |
| 14 | * @returns Username as a string, empty if not set. | 16 | * @param url URL of the services.citra-emu.org endpoint to post data to. |
| 15 | */ | 17 | * @param data String of JSON data to use for the body of the POST request. |
| 16 | const std::string& GetUsername(); | 18 | * @param allow_anonymous If true, allow anonymous unauthenticated requests. |
| 17 | 19 | * @param username Citra username to use for authentication. | |
| 18 | /** | 20 | * @param token Citra token to use for authentication. |
| 19 | * Gets the current token for accessing services.citra-emu.org. | ||
| 20 | * @returns Token as a string, empty if not set. | ||
| 21 | */ | 21 | */ |
| 22 | const std::string& GetToken(); | 22 | void PostJson(const std::string& url, const std::string& data, bool allow_anonymous, |
| 23 | const std::string& username = {}, const std::string& token = {}); | ||
| 23 | 24 | ||
| 24 | /** | 25 | /** |
| 25 | * Posts JSON to services.citra-emu.org. | 26 | * Gets JSON from services.citra-emu.org. |
| 27 | * @param func A function that gets exectued when the json as a string is received | ||
| 26 | * @param url URL of the services.citra-emu.org endpoint to post data to. | 28 | * @param url URL of the services.citra-emu.org endpoint to post data to. |
| 27 | * @param data String of JSON data to use for the body of the POST request. | 29 | * @param allow_anonymous If true, allow anonymous unauthenticated requests. |
| 30 | * @param username Citra username to use for authentication. | ||
| 31 | * @param token Citra token to use for authentication. | ||
| 32 | * @return future that holds the return value T of the func | ||
| 28 | */ | 33 | */ |
| 29 | void PostJson(const std::string& url, const std::string& data); | 34 | template <typename T> |
| 35 | std::future<T> GetJson(std::function<T(const std::string&)> func, const std::string& url, | ||
| 36 | bool allow_anonymous, const std::string& username = {}, | ||
| 37 | const std::string& token = {}); | ||
| 30 | 38 | ||
| 31 | } // namespace WebService | 39 | } // namespace WebService |